With all the .Net managed-host user-controls that I’ve created so far, I found the need to upload documents from one of them into the Dynamics-Document-Store. The specific example in question was the Desktop-Publishing control that I used for the invoice printing PoC:  [https://community.dynamics.com/ax/b/dynamicsax_wpfandnetinnovations/archive/2013/02/23/creating-desktop-publishing-documents-in-dynamics-part-3.aspx#.UahsO0DFX3Q].
As soon as the document has been created, I then need to save it (in memory) as either XPS or PDF (read-only-format) and then upload it back into the Collections module (for the credit controllers).
There is a bit of standard X++ code that will do this very job and I’ve placed it into a class in order to expose the functionality via a .Net proxy:
class BillPrintRunDocumentUpload
    Filename            fileName;
    RefRecId            refRecId;
    RefTableId          refTableId;
public Filename parmFilename(Filename _filename = filename)
    filename = _filename;
    return filename;
public RefRecId parmRefRecId(RefRecId _refRecId = refRecId)
    refRecId = _refRecId;
    return refRecId;
public RefTableId parmRefTableId(RefTableId _refTableId = refTableId)
    refTableId = _refTableId;
    return refTableId;
public void uploadDocument()
    DocuRef             docuRef1, docuRef2;
    DocuActionArchive   docuActionArchive;
    docuRef1.RefRecId       = refRecId;
    docuRef1.RefTableId     = refTableId;
    docuRef1.RefCompanyId   = curext();
    docuRef1.TypeId         = 'File';
    docuRef1.Restriction    = DocuRestriction::External;
    docuRef1.Notes          = 'Auto uploaded from bill invoice run.';
    select forupdate docuRef2 where docuRef2.RecId ==  docuRef1.RecId;
    docuActionArchive       = DocuAction::newDocuRef(docuRef2);
    docuActionArchive.add(docuRef2, fileName);

·         You can use this class as a .Net proxy by dragging and dropping from the Application-explorer into your Wpf User-control project.

You can then invoke the functionality by filling in all the class properties and calling the “uploadDocument” method from the client. It’s relatively simple; all you need is theTableId and the RecId of the record you wish to attach the document to (as in the following examples):
C#: Upload a document to the Client container
// upload document to Customer
BillPrintRunDocumentUpload objLegalBillPrintRunDocumentUpload = new BillPrintRunDocumentUpload();
C#: Upload a document to the Customer transactions container
// upload document to Customer transactions
CustTrans objCustTrans = new CustTrans();
objCustTrans = CustTrans.findFromInvoice(objBillTable.BillId);
Auto-uploading the document after invoice-production has the effect of adding an attachment icon on the main collection screen as shown below. Clicking on the document icon opens a dialog showing the invoice that’s been auto-uploaded.
This can be achieved from any 3rd party application that produces your invoices so long as it has the capability to call the .Net proxy class defined above.