2

印刷ダイアログを強制的に開いて、ユーザーがメールアドレスを設定して[OK]を押すだけで済むようにしようとしています。印刷ダイアログなしでレポートをファイルまたはプリンターに印刷する方法について複数のチュートリアルを見つけましたが、それは私が探しているものではありません。

通常、レポートを電子メールで送信するには、ユーザーはレポートを表示し、ツールバーの印刷アイコンをクリックしてから、電子メールを選択して送信します。最初の2つのステップを自動的に切り取りたいです。

これは、これまでのところこれを行うための私の多くの試みの1つですが、役に立ちません。

void emailInvoice()
{
Args                args;
ReportRun           rr;
Report              rb;
PrintJobSettings    pjs;
CustInvoiceJour     record;
;

select record where record.RecId == 5637175089;

args = new Args("SalesInvoice");
args.record(record);
args.parmEnum(PrintCopyOriginal::OriginalPrint);

// Set report run properties
rr = new ReportRun(args,'');
rr.suppressReportIsEmptyMessage(true);
rr.query().interactive(false);

// set report properties
rb = rr.report();
rb.interactive(true);

// set print job settings
pjs = rr.printJobSettings();
pjs.fileName(strfmt("C:\\Users\\gbonzo\\Desktop\\%1.pdf", record.SalesId));
pjs.fitToPage(true);
// break the report info pages using the height of the current printer's paper
pjs.virtualPageHeight(-1);


// force PDF printing
pjs.format(PrintFormat::PDF);
pjs.setTarget(PrintMedium::Mail);
pjs.viewerType(ReportOutputUserType::PDF);

// lock the print job settings so can't be changed
// X++ code int the report may try to change the destination
// to the screen for example but this does not make
// sense when running a report here
pjs.lockDestinationProperties(true);

// Initialize the report
rr.init();

rr.run();
}

よろしくお願いします!

4

2 に答える 2

1

必要なすべてのダイアログ フィールドを取得し、そこから必要なすべてのパラメーターを渡してレポートをプログラムで実行する RunBase 標準ダイアログ クラス (プリンターを選択する必要がある場合は RunBaseBatchPrintable) を開発しようとしましたか? 私はそれがうまくいくと確信しており、おそらくユーザーの操作に必要なロジックのレポートを分離するよりクリーンなコードを残すでしょう。

ここで例を読んでください:

http://waikeatng.blogspot.com.es/2010/10/using-runbasebatchprintable-class.html

于 2013-01-28T16:02:51.723 に答える
0

run() メソッドを呼び出す前に、ReportRun クラスの prompt() メソッドを呼び出す必要があります。

if (rr.prompt())
{
    rr.run();
}

prompt() メソッドは、印刷ダイアログを表示します。ユーザーにとってより簡単にしたい場合は、SysMailer クラスを使用できます。quickSend() メソッドを見てください。

于 2013-01-18T14:55:53.123 に答える