2

からJPGファイルをダウンロードする必要がありFileCabinetますNetSuite。そのためにファイル名はわかっているので、ファイルを検索して に割り当てましたFileObject。私はオブジェクトを正しく理解しましたが、NULLコンテンツを取得しました。ここでいくつかのコードを提供しています。ここでエラーまたは欠落しているステップを誰かが指摘できますか? ありがとうございました。

var result = _service.search(flSearch);
if (result.totalRecords > 0)
{
    recordList = result.recordList;
    Record[] records = new Record[recordList.Length];
    for (int j = 0; j < recordList.Length; j++)
    {
        if (recordList[j] is File)
        {
            File itemImage = (File)(recordList[j]);            
            byte[] data;
            data = new Byte[(int)itemImage.fileSize];
            data = itemImage.content;  //Here getting NULL value
            FileStream inFile;
            using (inFile = new FileStream("newImage.jpg", FileMode.Create, FileAccess.Write))
            {
                inFile.Write(data, 0, data.Length);
            }
        }
    }
}
4

2 に答える 2

2

itemImage は単なる文字列です - base64.

その文字列を取得して base64 デコードを行い、それをローカル ファイルに保存します。

于 2012-11-08T01:14:04.583 に答える
1

検索が検索するファイルの内部 ID に基づいている場合は、次のコードが役立つ場合があります。

        var service = LoginNetSuite();
        Tuple<string, string> fileContent = null;

        FileSearch fileSearch = new FileSearch();
        FileSearchBasic fileSearchBasic = new FileSearchBasic();

        // Specify the folder in which the search is to be done.
        SearchMultiSelectField folderFilter = new SearchMultiSelectField();
        folderFilter.@operator = SearchMultiSelectFieldOperator.anyOf;
        folderFilter.operatorSpecified = true;
        RecordRef[] folder = new RecordRef[1];
        folder[0] = new RecordRef();
        folder[0].internalId = "78990"; // 78990 => Internal id of the folder.
        folderFilter.searchValue = folder;
        fileSearchBasic.folder = folderFilter;

        // Specify the file internal id.
        SearchMultiSelectField fileFilter = new SearchMultiSelectField();
        fileFilter.@operator = SearchMultiSelectFieldOperator.anyOf;
        fileFilter.operatorSpecified = true;
        RecordRef[] rec = new RecordRef[1];
        rec[0] = new RecordRef();
        rec[0].internalId = "345656"; // 345656 => Internal id of the file.
        fileFilter.searchValue = rec;

        fileSearchBasic.internalId = fileFilter;
        fileSearch.basic = fileSearchBasic;

        var result = service.search(fileSearch);
        var recordList = (Record[])result.recordList;
        if (recordList != null && recordList.Length != 0)
        {
            var file = (File)result.recordList.First();
            fileContent = new Tuple<string, string>(file.url, file.name);
        }

このコードでは、フォルダーの内部 ID とファイルの内部 ID が検索パラメーターとして指定されています。したがって、ファイル検索は、指定されたファイル ID を持つ指定されたファイル キャビネットで実行されます。netsuite からの応答は、内部 ID、ファイル名、URL、フォルダー名などで構成されます。ファイルは URL の場所からダウンロードできます。

于 2016-12-14T07:25:57.933 に答える