25. Februar 2025 11:56
using Microsoft.Dynamics.Framework.UI.Extensibility;
namespace PDFViewer
{
[ControlAddInExport("PDFViewerControl")]
public interface IPDFViewerControlAddIn
{
[ApplicationVisible]
event ApplicationEventHandler ControlAddinReady;
[ApplicationVisible]
event ApplicationEventHandler onView;
[ApplicationVisible]
void LoadPDF(string PDFDocument, bool IsFactbox);
[ApplicationVisible]
void SetVisible(bool IsVisible);
}
}
<?xml version="1.0" encoding="utf-8"?>
<Manifest>
<Resources>
<Script>Script.js</Script>
<StyleSheet>StyleSheet.css</StyleSheet>
</Resources>
<ScriptUrls>
<ScriptUrl>https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js</ScriptUrl>
<ScriptUrl>https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.8.335/pdf.min.js</ScriptUrl>
</ScriptUrls>
<Script>
<![CDATA[
InitializeControl('controlAddIn');
Microsoft.Dynamics.NAV.InvokeExtensibilityMethod('ControlAddInReady', null);
]]>
</Script>
<MinimumHeight>1</MinimumHeight>
<MinimumWidth>1</MinimumWidth>
<MaximumHeight>2000</MaximumHeight>
<VerticalStretch>true</VerticalStretch>
<VerticalShrink>true</VerticalShrink>
<HorizontalStretch>true</HorizontalStretch>
<HorizontalShrink>true</HorizontalShrink>
</Manifest>
25. Februar 2025 12:28
function InitializeControl(MimeData,MimeType) {
try {
const container = document.getElementById("controlAddIn");
const iframe = document.createElement('iframe');
iframe.setAttribute('style','width:100%; height:100%');
iframe.setAttribute('src',`data:${MimeType};base64,${MimeData}`);
container.appendChild(iframe);
} catch (err) {
RaiseALEvent('OnError', ['Javascript Error :' + err]);
}
}
function onMessage(event) {
if (event.origin !== container) {
console.log('Blocked invalid cross-domain call');
return;
}
var data = event.data;
if (typeof(window[data.func]) == "function") {
window[data.func].call(null, data.message);
}
}
function RaiseALEvent(eventName, args) {
Microsoft.Dynamics.NAV.InvokeExtensibilityMethod(eventName, args);
}
window.__controlAddInError__NAV = window.__controlAddInError;
window.__controlAddInError = function (e) {
console.log("Unhandled error has occurred: '" + e.message + "' - Stack: " + e.stack);
window.__controlAddInError__NAV(e);
};
25. Februar 2025 12:48
InitializeControl('controlAddIn');
InitializeControl('controlAddIn');
Microsoft.Dynamics.NAV.InvokeExtensibilityMethod('ControlAddInReady', null);
[ApplicationVisible]
event ApplicationEventHandler onView;
25. Februar 2025 14:05
fiddi hat geschrieben:Hallo,
geht es dir nur um den Viewer oder benötigst du PDFlib.js vom Mozilla, damit du auch den PDF- Anhänge (ZUGFeRD-Rechnungen) im Edge/Chrome sehen kannst?
um einen Viewer für PDF bzw. XML zu implementieren benötigst du nur relativ simples JavaScript:
Script.Js
- Code:
function InitializeControl(MimeData,MimeType) {
try {
const container = document.getElementById("controlAddIn");
const iframe = document.createElement('iframe');
iframe.setAttribute('style','width:100%; height:100%');
iframe.setAttribute('src',`data:${MimeType};base64,${MimeData}`);
container.appendChild(iframe);
} catch (err) {
RaiseALEvent('OnError', ['Javascript Error :' + err]);
}
}
function onMessage(event) {
if (event.origin !== container) {
console.log('Blocked invalid cross-domain call');
return;
}
var data = event.data;
if (typeof(window[data.func]) == "function") {
window[data.func].call(null, data.message);
}
}
function RaiseALEvent(eventName, args) {
Microsoft.Dynamics.NAV.InvokeExtensibilityMethod(eventName, args);
}
window.__controlAddInError__NAV = window.__controlAddInError;
window.__controlAddInError = function (e) {
console.log("Unhandled error has occurred: '" + e.message + "' - Stack: " + e.stack);
window.__controlAddInError__NAV(e);
};
Gruß Fiddi
25. Februar 2025 14:31
25. Februar 2025 16:07
25. Februar 2025 16:27
25. Februar 2025 16:41
25. Februar 2025 16:43
fiddi hat geschrieben:Hallo,
Wenn ich nicht irgendwas verpasst habe, sind MediaSets und Media leider nicht wirklich zu gebrauchen, weil man die Elemente eines MediaSets nicht gezielt ansprechen kann, und Media nicht als Funktionsparameter zu gebrauchen ist.
Der gute alte Blob ist hier flexibler. den kann man man mit Tabelle/Codeunit "Temp Blob" munter durch die Gegend schieben, und auch mit der Codeunit 419 File Management auf den Client herunter laden. den erhaltenen Dateinamen kannst du dann mit Hyperlink() öffnen.
Gruß Fiddi
25. Februar 2025 17:06
Leider kann ich damit keine pdfs öffnen oder anzeigen, weil "windows-fotoanzeige" nur Bilder kann.
25. Februar 2025 17:20
25. Februar 2025 18:02
26. Februar 2025 13:22
26. Februar 2025 13:56
26. Februar 2025 15:05