Прикрепленный файл не отображается в документе - PullRequest
0 голосов
/ 29 октября 2018

У меня есть требование сгенерировать файл при сохранении заказа на покупку, чтобы загрузить его на FTP и сохранить файл как вложение в виде текстового файла в разделе файла

Я создаю файл в событии RowPersisted

protected void POOrder_RowPersisted(PXCache cache, PXRowPersistedEventArgs e, PXRowPersisted InvokeBaseHandler)
{
    if (InvokeBaseHandler != null)
        InvokeBaseHandler(cache, e);
    var row = (POOrder)e.Row;
    if (e.TranStatus == PXTranStatus.Open)
    {
        if (row.Hold != true && row.Status == POOrderStatus.Open)
        {
            string output = GenerateFeed();  // Generates Feed and upload to Ftp.
            AttachFile(row, output);
        }
    }
}


private void  AttachFile(POOrder row , string output)
{
    string filename = $"{row.OrderNbr.ToString()}.txt";
    byte[] data = output.ToByteArray();
    PX.SM.UploadFileMaintenance filegraph = PXGraph.CreateInstance<PX.SM.UploadFileMaintenance>();
    PX.SM.FileInfo fileinfo = new PX.SM.FileInfo(filename, null, data);
    if (filegraph.SaveFile(fileinfo, PX.SM.FileExistsAction.CreateVersion))
    {
        PXNoteAttribute.SetFileNotes(Base.Document.Cache, row, new Guid[] { fileinfo.UID.Value });
        string note = PXNoteAttribute.GetNote(Base.Document.Cache, row);
        PXNoteAttribute.SetNote(Base.Document.Cache, row, note);
    }
}   

Прикрепленный файл недоступен в меню файлов документа.

После проверки я обнаружил, что ссылка не создана в NoteDoc.

У кого-нибудь есть решение этой проблемы?

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Я переопределил Persist и создал ленту новостей, а также прикрепил файл к документу.

Я столкнулся с одной проблемой: метод, который вызывается так много раз, и генерируется фид, и при каждом выполнении и добавлении новой версии в файловую систему

Я управляю генерацией файлов через неограниченное поле, созданное как расширение в POOrder DAC

public delegate Int32 PersistDelegate(Type cacheType, PXDBOperation operation);
    [PXOverride]
    public Int32 Persist(Type cacheType, PXDBOperation operation, PersistDelegate baseMethod)
    {
        var row = Base.Document.Current;
        POOrderExt ext = Base.Document.Cache.GetExtension<POOrderExt>(row);
        if (row.Hold != true && row.Status == POOrderStatus.Open && Base.Document.Cache.GetStatus(Base.Document.Current) != PXEntryStatus.Inserted)
        {
            if (ext.UsrIsProcessed == null && (operation == PXDBOperation.Delete || operation == PXDBOperation.Update))
            {
                ext.UsrIsProcessed = true;
                string output = GenerateFeed();
                AttachFile(row, output);
            }
        }

        return baseMethod(cacheType, operation);
    }

Расширение ЦАП

    public class POOrderExt : PXCacheExtension<POOrder>
    {
        #region UsrIsProcessed
        [PXBool]
        public virtual bool? UsrIsProcessed { get; set; }
        public abstract class usrIsProcessed : IBqlField { }
        #endregion
    }
0 голосов
/ 30 октября 2018

Думаю, проблема в том, что после сохранения строки POOrder уже слишком поздно ее изменять, поскольку она не будет сохраняться снова. Скорее всего, вы прикрепляете файл правильно, но не сохраняете запись POOrder после того, как файл прикреплен.

Вы можете изменить POOrder в RowPersisted, но вы не можете сохранить его снова, не вызывая бесконечный цикл.

Вам нужно изменить и сохранить POOrder, чтобы прикрепить файл, поэтому я предлагаю перехватить RowPersisting вместо RowPersisted:

void POOrder_RowPersisting(PXCache cache, 
                           PXRowPersistingEventArgs e, 
                           PXRowPersisting del)

Это позаботится о проблемах сохранения, потому что Persisting вызывается перед тем, как Persisted фактически сохранит изменение в POOrder. Чтобы прикрепить файл, нужно всего лишь вызвать SetFileNotes:

if (filegraph.SaveFile(fileinfo, PX.SM.FileExistsAction.CreateVersion))
{
    PXNoteAttribute.SetFileNotes(Base.Document.Cache, row, fileinfo.UID.Value);
}

enter image description here

...