我需要在保存采购订单以上传到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中创建链接。
有人对此问题有解决方案吗?
答案 0 :(得分:0)
我认为问题在于,在POOrder行被持久保存之后,现在修改它为时已晚,因为它不会再次被持久保存。您可能会正确附加文件,但在附加文件后不保存POOrder记录。
您可以在RowPersisted中修改POOrder,但不能再次持久保存它,而不会导致无限循环。
您需要修改并保留POOrder来附加文件,因此我建议钩住RowPersisting而不是RowPersisted:
function isValid()
{
var pass = "seahorse";
var password = document.getElementById("password");
if (password.value.match(pass))
{
window.location.href = "HappyChristmas.html";
}
else
{
alert('Nope, try again');
}
}
这将解决保存问题,因为在Persisted实际保留对POOrder的更改之前调用Persisting。要附加文件,您只需调用SetFileNotes:
<div class="jumbotron">
<form name="PasswordField" action="">
<div class="form-group">
<label for="exampleInputPassword1"><h4>If you're an octopus I am...</h4></label>
<input type="password" class="form-control" id="password" placeholder="Password">
</div>
<button type="submit" onclick="isValid()" class="btn btn-default">Submit</button>
</form>
</div>
答案 1 :(得分:0)
我已经重写了Persist并生成了feed,并将文件附加到了文档上。
我在这里遇到了一个问题,就是这种方法被调用了很多次,并且生成了feed,并且每次执行并将新版本添加到文件系统中
我正在通过作为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);
}
DAC扩展
public class POOrderExt : PXCacheExtension<POOrder>
{
#region UsrIsProcessed
[PXBool]
public virtual bool? UsrIsProcessed { get; set; }
public abstract class usrIsProcessed : IBqlField { }
#endregion
}