RE: Blob field empty in Posted Invoice
This is BC14. Here is the code I'm using to ensure that the field is copied from the Order to the Posted Invoice.
[EventSubscriber(Codeunit,5988,OnBeforeServInvHeaderInsert)]
LOCAL PROCEDURE ServiceOrderToInvoiceOnBeforeFinalInsert@50211(VAR ServiceInvoiceHeader@50099 : Record 5992;ServiceHeader@50104 : Record 5900);
VAR
FieldTable@50100 : Record 2000000041;
RecRefSVO@50101 : RecordRef;
RecRefInv@50102 : RecordRef;
BlobText@50105 : Text;
BEGIN
RecRefSVO.GETTABLE(ServiceHeader);
RecRefInv.GETTABLE(ServiceInvoiceHeader);
FieldTable.SETRANGE(TableNo,RecRefSVO.NUMBER);
FieldTable.SETRANGE(Type,FieldTable.Type::BLOB);
FieldTable.SETRANGE("No.",50000,59999);
IF FieldTable.FINDSET THEN
REPEAT
BlobText := GetTextFromBlob(RecRefSVO,FieldTable."No.");
IF BlobText <> '' THEN
SetBlobTextNoModify(RecRefInv,FieldTable."No.",BlobText);
UNTIL FieldTable.NEXT = 0;
RecRefInv.SETTABLE(ServiceInvoiceHeader);
END;
PROCEDURE GetTextFromBlob@50101(VAR RecRef@50100 : RecordRef;FieldNo@50102 : Integer) : Text;
VAR
TempBlob@50099 : Record 99008535;
BlobFieldRef@50101 : FieldRef;
BEGIN
BlobFieldRef := RecRef.FIELD(FieldNo);
BlobFieldRef.CALCFIELD;
TempBlob.INIT;
TempBlob.Blob := BlobFieldRef.VALUE;
IF NOT TempBlob.Blob.HASVALUE THEN
EXIT('');
Text1 := TempBlob.ReadAsTextWithCRLFLineSeparator;
EXIT(Text1);
END;
PROCEDURE SetBlobTextNoModify@50102(VAR RecRef@50102 : RecordRef;FieldNo@50099 : Integer;NewText@50100 : Text) : Boolean;
VAR
TempBlob@50101 : Record 99008535;
BlobFieldRef@50103 : FieldRef;
BEGIN
BlobFieldRef := RecRef.FIELD(FieldNo);
BlobFieldRef.CALCFIELD;
TempBlob.INIT;
BlobFieldRef.VALUE := TempBlob.Blob; //clear field
IF NewText <> '' THEN BEGIN
TempBlob.WriteAsText(NewText,TEXTENCODING::UTF8);
BlobFieldRef.VALUE := TempBlob.Blob;
EXIT(TRUE);
END ELSE
EXIT(FALSE);
END;
Below are screenshots from the debugger showing that the temporary ServInvHeader has the blob fields updated (by my code above) and the physical ServInvHeader also has those blob fields populated both before and after the "INSERT" statement:


But (after COMMIT) when I open up the Service Invoice Header, all the blob fields are blank--and when I check them with SQL, the fields are blank in the database as well.