microsoft / ALAppExtensions

Repository for collaboration on Microsoft AL application add-on and localization extensions for Microsoft Dynamics 365 Business Central.
MIT License
779 stars 613 forks source link

[Event Request] Codeunit 8612 "Config. Template Management" - Function "InsertTemplate" - Add event OnAfterModifyRecordWithField #27232

Open ROUCHY-Yoann opened 1 month ago

ROUCHY-Yoann commented 1 month ago

Describe the request

Hello, can you please add a new Event "OnAfterModifyRecordWithField" in codeunit 8612 "Config. Template Management" - Function "InsertTemplate" ?

LOCAL InsertTemplate(VAR RecRef : RecordRef;ConfigTemplateHeader : Record "Config. Template Header";SkipFields : Boolean;VAR TempSkipField : Record Field) ConfigTemplateLine.SETRANGE("Data Template Code",ConfigTemplateHeader.Code); IF ConfigTemplateLine.FINDSET THEN REPEAT CASE ConfigTemplateLine.Type OF ConfigTemplateLine.Type::Field: IF ConfigTemplateLine."Field ID" <> 0 THEN BEGIN IF SkipFields THEN SkipCurrentField := ShouldSkipField(TempSkipField,ConfigTemplateLine."Field ID",ConfigTemplateLine."Table ID") ELSE SkipCurrentField := FALSE;

      IF NOT SkipCurrentField THEN BEGIN
        FieldRef := RecRef.FIELD(ConfigTemplateLine."Field ID");
        ModifyRecordWithField(RecRef,FieldRef,ConfigTemplateLine."Default Value",ConfigTemplateLine."Language ID");
      END;
    END;
  ConfigTemplateLine.Type::Template:
    IF ConfigTemplateLine."Template Code" <> '' THEN
      IF ConfigTemplateHeader2.GET(ConfigTemplateLine."Template Code") THEN
        IF ConfigTemplateHeader2."Table ID" = ConfigTemplateHeader."Table ID" THEN
          InsertTemplate(RecRef,ConfigTemplateHeader2,SkipFields,TempSkipField)
        ELSE BEGIN
          UpdatingRelatedTable := TRUE;
          RecRef2.OPEN(ConfigTemplateHeader2."Table ID");
          UpdateRecord(ConfigTemplateHeader2,RecRef2);
          UpdatingRelatedTable := FALSE;
        END;
END;

OnAfterModifyRecordWithField(RecRef,ConfigTemplateHeader);

UNTIL ConfigTemplateLine.NEXT = 0;

[IntegrationEvent] OnAfterModifyRecordWithField(VAR RecRef : RecordRef;ConfigTemplateHeader : Record "Config. Template Header") begin end;

Additional context

We need to update information in related tables at the end of each iteration. Internal work item: AB#548199

Groenbech96 commented 3 weeks ago

Do you have to do it for both Template and Field type?

ROUCHY-Yoann commented 3 weeks ago

Yes, please.

Groenbech96 commented 5 days ago
case ConfigTemplateLine.Type of
                    ConfigTemplateLine.Type::Field:
                        if ConfigTemplateLine."Field ID" <> 0 then begin
                            if SkipFields then
                                SkipCurrentField := ShouldSkipField(TempSkipField, ConfigTemplateLine."Field ID", ConfigTemplateLine."Table ID")
                            else
                                SkipCurrentField := false;

                            if not SkipCurrentField then begin
                                FieldRef := RecRef.Field(ConfigTemplateLine."Field ID");

                                IsHandled := false;
                                OnInsertTemplateBeforeValidateFieldValue(RecRef, FieldRef, ConfigTemplateLine."Default Value", ConfigTemplateLine."Language ID", IsHandled, ConfigTemplateLine);
                                if not IsHandled then begin
#if CLEAN25
                                    ConfigValidateMgt.ValidateFieldValue(RecRef, FieldRef, ConfigTemplateLine."Default Value", false, ConfigTemplateLine."Language ID");                                    
#else
                                    IsNotSkipped := ValidateFieldValue(RecRef, FieldRef, ConfigTemplateLine);
#endif
                                    FieldIsModified := IsNotSkipped or FieldIsModified;
                                end;
                            end;
                        end;
                    ConfigTemplateLine.Type::Template:
                        if ConfigTemplateLine."Template Code" <> '' then
                            if ConfigTemplateHeader2.Get(ConfigTemplateLine."Template Code") then
                                if ConfigTemplateHeader2."Table ID" = ConfigTemplateHeader."Table ID" then
                                    InsertTemplate(RecRef, ConfigTemplateHeader2, SkipFields, TempSkipField)
                                else begin
                                    UpdatingRelatedTable := true;
                                    RecRef2.Open(ConfigTemplateHeader2."Table ID");
                                    UpdateRecord(ConfigTemplateHeader2, RecRef2);
                                    UpdatingRelatedTable := false;
                                end;
                    else
                        OnInsertTemplateCaseElse(ConfigTemplateLine, ConfigTemplateHeader2, FieldRef, RecRef2, SkipFields, TempSkipField, RecRef);
                end;
                OnAfterModifyRecordWithField(RecRef, ConfigTemplateHeader); <--- New event.

Please confirm this is the one?

ROUCHY-Yoann commented 5 days ago

I confirm, thank you.