Codeunit 1633 Office Host Provider
- App
- Base Application
- Namespace
- Microsoft.CRM.Outlook
- Versions
- 17-28
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/CRM/Outlook/OfficeHostProvider.Codeunit.al194 lines, Copyright (c) Microsoft Corporation. MIT
// ------------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// ------------------------------------------------------------------------------------------------
namespace Microsoft.CRM.Outlook;
using Microsoft.EServices.EDocument;
using System;
using System.Integration;
codeunit 1633 "Office Host Provider"
{
SingleInstance = true;
trigger OnRun()
begin
end;
var
TempExchangeObjectInternal: Record "Exchange Object" temporary;
TempOfficeAddinContextInternal: Record "Office Add-in Context" temporary;
[RunOnClient]
OfficeHost: DotNet OfficeHost;
IsHostInitialized: Boolean;
local procedure CanHandle(): Boolean
var
OfficeAddinSetup: Record "Office Add-in Setup";
begin
if not OfficeAddinSetup.Get() then begin
OfficeAddinSetup.Init();
OfficeAddinSetup.Insert(true);
end;
exit(OfficeAddinSetup."Office Host Codeunit ID" = Codeunit::"Office Host Provider");
end;
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Office Host Management", 'OnInitializeHost', '', false, false)]
local procedure OnInitializeHost(NewOfficeHost: DotNet OfficeHost; NewHostType: Text)
begin
if not CanHandle() then
exit;
OfficeHost := NewOfficeHost;
IsHostInitialized := not IsNull(OfficeHost);
end;
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Office Host Management", 'OnInitializeContext', '', false, false)]
local procedure OnInitializeContext(TempNewOfficeAddinContext: Record "Office Add-in Context" temporary)
begin
if not CanHandle() then
exit;
TempOfficeAddinContextInternal := TempNewOfficeAddinContext;
end;
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Office Host Management", 'OnInitializeExchangeObject', '', false, false)]
local procedure OnInitializeExchangeObject()
begin
if not CanHandle() then
exit;
TempExchangeObjectInternal.DeleteAll();
end;
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Office Host Management", 'OnGetHostName', '', false, false)]
local procedure OnGetHostName(var HostName: Text)
begin
if not CanHandle() then
exit;
if not IsHostInitialized then
exit;
HostName := OfficeHost.HostName();
end;
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Office Host Management", 'OnGetHostType', '', false, false)]
local procedure OnGetHostType(var HostType: Text)
begin
if not CanHandle() then
exit;
if not IsHostInitialized then
exit;
HostType := OfficeHost.HostType();
end;
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Office Host Management", 'OnCloseCurrentPage', '', false, false)]
local procedure OnCloseCurrentPage()
begin
if not CanHandle() then
exit;
Error('');
end;
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Office Host Management", 'OnInvokeExtension', '', false, false)]
local procedure OnInvokeExtension(FunctionName: Text; Parameter1: Variant; Parameter2: Variant; Parameter3: Variant; Parameter4: Variant)
begin
if not CanHandle() then
exit;
OfficeHost := OfficeHost.Create();
OfficeHost.InvokeExtensionAsync(FunctionName, Parameter1, Parameter2, Parameter3, Parameter4);
end;
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Office Host Management", 'OnIsHostInitialized', '', false, false)]
local procedure OnIsHostInitialized(var Result: Boolean)
begin
if not CanHandle() then
exit;
Result := IsHostInitialized;
end;
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Office Host Management", 'OnIsAvailable', '', false, false)]
local procedure OnIsAvailable(var Result: Boolean)
begin
if not CanHandle() then
exit;
OnIsHostInitialized(Result);
if GuiAllowed() then
if Result then
Result := OfficeHost.IsAvailable();
end;
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Office Host Management", 'OnGetTempOfficeAddinContext', '', false, false)]
local procedure OnGetTempOfficeAddinContext(var TempOfficeAddinContext: Record "Office Add-in Context" temporary)
begin
if not CanHandle() then
exit;
Clear(TempOfficeAddinContext);
TempOfficeAddinContext.Copy(TempOfficeAddinContextInternal);
end;
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Office Host Management", 'OnSendToOCR', '', false, false)]
local procedure OnSendToOCR(IncomingDocument: Record "Incoming Document")
begin
if not CanHandle() then
exit;
IncomingDocument.SendToOCR(true);
end;
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Office Host Management", 'OnEmailHasAttachments', '', false, false)]
local procedure OnEmailHasAttachments(var Result: Boolean)
var
OutlookAddInServices: Codeunit "Outlook Add-In Services";
begin
if not CanHandle() then
exit;
if TempOfficeAddinContextInternal.IsAppointment() then
exit;
if not (OfficeHost.CallbackToken in ['', ' ']) then
Result := OutlookAddInServices.EmailHasAttachments(TempOfficeAddinContextInternal."Item ID", OfficeHost.CallbackToken);
end;
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Office Host Management", 'OnGetEmailAndAttachmentsForEntity', '', false, false)]
local procedure OnGetEmailAndAttachmentsForEntity(var TempExchangeObject: Record "Exchange Object" temporary; "Action": Option InitiateSendToOCR,InitiateSendToIncomingDocuments,InitiateSendToWorkFlow,InitiateSendToAttachments; RecRef: RecordRef)
var
OutlookAddInServices: Codeunit "Outlook Add-In Services";
begin
if not CanHandle() then
exit;
if TempOfficeAddinContextInternal.IsAppointment() then
exit;
if not TempExchangeObjectInternal.IsEmpty() then begin
Clear(TempExchangeObject);
TempExchangeObjectInternal.ModifyAll(InitiatedAction, Action);
TempExchangeObjectInternal.ModifyAll(RecId, RecRef.RecordId());
TempExchangeObject.Copy(TempExchangeObjectInternal, true);
end else
if not (OfficeHost.CallbackToken in ['', ' ']) then begin
OutlookAddInServices.GetEmailAndAttachments(TempOfficeAddinContextInternal."Item ID", TempExchangeObject, Action, RecRef, OfficeHost.CallbackToken);
TempExchangeObjectInternal.Copy(TempExchangeObject, true);
end;
end;
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Office Host Management", 'OnGetEmailBody', '', false, false)]
local procedure OnGetEmailBody(ItemID: Text[250]; var EmailBody: Text)
var
OutlookAddInServices: Codeunit "Outlook Add-In Services";
begin
if not CanHandle() then
exit;
if not (OfficeHost.CallbackToken in ['', ' ']) then
EmailBody := OutlookAddInServices.GetEmailBodyViaGraph(ItemID, OfficeHost.CallbackToken);
end;
}