Thursday 22 August 2013

How to connect to a Syspro web service

Syspro has a very powerful and comprehensive set of API's exposed as web services. Here is a guide for how to use Syspro's web services.

Firstly, you need to connect to your Syspro web service’s server and get authenticated; in return, you will get a GUID.
To do this, you need to connect to the Logon method of this SOAP service:

Then you will can call an actual API to do something useful. In this example, we will send Syspro a finished goods receipt using the Transaction web service:

To call the Transaction web service, you need to pass these four parameters:

  1. UserId – use the GUID you obtained when you logged into SYSPRO as described above.
  2. BusinessObject – set it to be this string: INVTMR. There are many business objects that you can call via the Transaction web services; consult the Syspro business object documentation on the Syspro Support Zone for what web services you can use. 
  3. XMLParameters – this will be a fairly large string containing an XML document as described below.
  4. XMLIn – this will be a fairly large string containing an XML document; see below for example.

XMLParameters

Here is an example of the XMLParameters string:
<?xml version="1.0" encoding="Windows-1252"?>
<PostInvReceipts xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:noNamespaceSchemaLocation="INVTMR.XSD">
  <Parameters>
    <TransactionDate>2013-08-20</TransactionDate>
    <ApplyIfEntireDocumentValid>Y</ApplyIfEntireDocumentValid>
    <ValidateOnly>N</ValidateOnly>
    <ReturnDetailedReceipt>N</ReturnDetailedReceipt>
  </Parameters>
</PostInvReceipts>

XMLIn

Here is an example of the XMLIn string:
<?xml version="1.0" encoding="Windows-1252"?>
<PostInvReceipts xmlns:xsd="http://www.w3.org/2001/XMLSchema-instance" xsd:noNamespaceSchemaLocation="INVTMRDOC.XSD">
  <Item>
    <Warehouse>FG</Warehouse>
    <StockCode>A100</StockCode>
    <Quantity>1.000</Quantity>
    <Reference>Receipt</Reference>
  </Item>
</PostInvReceipts>

XMLOut

On successfully calling the web service, you should get a result like this:
<?xml version="1.0" encoding="Windows-1252"?>
<postinvreceipts Language='05' Language2='EN' CssStyle='' DecFormat='1' DateFormat='01' Role='01' Version='6.1.038' OperatorPrimaryRole='   '>
<Item>
<ItemNumber>000001</ItemNumber>
</Item>
<Key>
<JnlYear>2013</JnlYear>
<JnlMonth>05</JnlMonth>
<Journal>00032</Journal>
<EntryNumber>00001</EntryNumber>
<Warehouse>FG</Warehouse>
<GlJournal>
<GlYear>2013</GlYear>
<GlPeriod>05</GlPeriod>
<GlJournal>00230</GlJournal>
</GlJournal>
</Key>
<StatusOfItems>
<ItemsProcessed>1</ItemsProcessed>
<ItemsInvalid>0</ItemsInvalid>
</StatusOfItems>
</postinvreceipts>

XSD files

There are XSD files available for each Business Object. The XSD files are distributed with Syspro and found in the <Syspro-installation-directory>\Base\Schemas directory. These XSD files can be used to generate code objects. See this blog for more information on generating code objects from Syspro's XSD files: http://phildetail.blogspot.com.au/2014/04/how-to-use-xsd2code-for-syspros.html

Monday 12 August 2013

What LOG files does Syspro create?

Diagnosing errors can be tricky; a log file can be invaluable. Here are some log files that Syspro updates.

Log file
Description
BASE/mfdebug.log
This file gets written to when you crash Syspro; you can crash Syspro by creating a custom with a .Net User Control that throws an unhandled exception.
BASE/SRSQRT.TXT
If you create an empty file, BASE/SRSQRT.DEBUG, file, then as soon as SRS or VBScriptiong with CALLBO is used, this log file will be written to.
BASE/log.txt
If you call SYSPRO.EXE, IMPACT.EXE, IMPCSC.EXE or IMPAUT.EXE with the /log parameter, then this file will be created. It will record each time the client/server communications dialog tries to connect to the server.
BASE/settings/<operator>_RTS_ERROR.TXT
Created when there is a runtime error.
%Temp%/SYSPROCOMMLOG_*.txt
Syspro Communications Service will log files in your Temp directory (e.g. C:\Users\You\Local Settings\Temp) if you have the DetailedLog setting set to true in your Syspro Communications Service's config file, e.g. <add key="DetailedLog" value="true" /> in C:\Syspro\Syspro WCF Services\SYSPROWCFHostService.exe.config.
%Temp%/SYSPROActivityCallsLog.txt
If you create this file, the Syspro Workflow engine will log actions in it.
BASE/Settings/enetlog.dat
This log file identifies the Business Objects invoked. This file gets written to by e.Net. There are two ways to cause this file to be written to:

  1. Set the LogLevel parameter to ldDebug when you use e.Net to log into Syspro.
  2. In the Syspro GUI, go to Setup / Setup Options / General Setup / System Setup; go to the General tab and set Diagnostics to enet01.
BASE/Settings/enetlog.txt does not seem to be written to anymore, since about Syspro 6.1 SP1.

To view enetlog.dat, go to Home / Administration / Diagnostics / Diagnostics Manager (aka. IMPMON). Then go to the e.net Transaction Log tab and hit the Refresh button.

See this post for more details.
BASE/Settings/diag_xml
Xml inputs and outputs to Business Objects are logged here if the Diagnostics setting in System Setup / General is set to enetxx.
e.net Transaction Log
Go to Home / Administration / Diagnostics / Diagnostics Manager / e.net Transaction Log and hit the Refresh button.
AdmEventLog (database table)
Go to Home / Customzation / Event Management / Functions / View Log File.
AdmSignatureLog (database table)
Query this table directly in the database using SQL Server Management Studio or similar.
Job Logging
Go to Setup / Security / Job Logging. This listing includes program Logon and Logoff dates and times - quite useful.
Windows Event Log
Go to the Windows Event Log / Applications and Services Logs / SYSPROCOMMS and SYSPROSWS.
BASE\Settings\IMPUPD_Copy_Errors_*.txt
Errors encountered installing Syspro ports.
Electronic Signatures Audit Log
To view this, from the Syspro main menu, go to Program List / Administration / Electronic Signatures / eSignature Query.

Don't forget these invaluable tools as well: