Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pdf Dynamics 365操作中的文件文档附件问题_Pdf_X++_Dynamics 365 Operations - Fatal编程技术网

Pdf Dynamics 365操作中的文件文档附件问题

Pdf Dynamics 365操作中的文件文档附件问题,pdf,x++,dynamics-365-operations,Pdf,X++,Dynamics 365 Operations,我有一个生成PDF文档的批处理过程。但当我创建它时,我发现它被破坏了 对这个代码有什么建议吗 public boolean PDFProcess() { List PDFFiles; ListEnumerator PDFEnumerator; boolean errors; filename _from,_to,_temp, _name, _ext; container

我有一个生成PDF文档的批处理过程。但当我创建它时,我发现它被破坏了

对这个代码有什么建议吗

public boolean PDFProcess()
{
    List                PDFFiles;
    ListEnumerator      PDFEnumerator;
    boolean             errors;
    filename            _from,_to,_temp, _name, _ext;
    container           _split;
    Bindata             _bin;
    DocuRef             docuref;
    custTable           custTable;
    DocuActionArchive   DocuActionArchive;
    System.IO.MemoryStream stream;
    System.IO.StreamWriter write;
    PDFFiles = VE005FilesTools::GetlistOfFiles(VEParameters.VE005Path2Read,VEParameters.VE005FileNameDocumentFilter);
    PDFEnumerator = PDFFiles.getEnumerator();
    while(PDFEnumerator.moveNext())
    {
        _from = PDFEnumerator.current();
        custTable = this.DecodePDF(_from);

        if (custTable)
        {
            _split = fileNameSplit(_from);
            _name = conPeek(_split,2);
            _ext = conPeek(_split,3);
            stream = new System.IO.MemoryStream();
            writer = new System.IO.StreamWriter(stream);
            writer.Write(_name);
            writer.Flush();
            docuref = DocumentManagement::attachFileToCommon(CustTable, VEParameters.VE005DocuTypeId, stream, _name+_ext, 'PDF', _name+_ext);


            if (this.move(_from,VEParameters.VE005Path2Backup))
            {
                errors = true;
            }
        }
        else
        {
            if (this.move(_from,VEParameters.VE005Path2Errors))
            {
                errors = true;
            }
        }
    }
    return errors;
}

乍一看,似乎您并没有将文件内容读写到MemoryStream,而只是将文件名读写到MemoryStream

writer.Write(_name);
这就是为什么您的PDF可能已损坏(并且非常小:)

将文件的所有字节写入MemoryStream,即用以下内容替换上面的行:

writer.Write(System.IO.File::ReadAllBytes(_from));
但是,如果可能,更好的方法是直接使用文件流,从而绕过MemoryStream的开销:

using (var stream = System.IO.File::OpenRead(_from))
{
    docuref = DocumentManagement::attachFileToCommon(CustTable, VEParameters.VE005DocuTypeId, stream, _name+_ext, 'PDF', _name+_ext);
}
我现在没有访问开发环境的权限,所以我还不能测试它们。
让我知道它是否有效(一旦有机会,我会测试它)。

我已经更新了答案,请检查它是否适用于您使用的变量
var stream…
与我的变量
stream
相同?或者我必须声明另一个?在后一种情况下,当直接使用文件流时,您不再需要以前的MemoryStream和StreamWriter,因此我只是重用了您的变量名。您好,您能回答这个问题吗->