Home | Forums | Contact | Search | Syndication  
 
 [login] [create account]   Friday, August 29, 2025 
 
slxdeveloper.com Community Forums  
   
The Forums on slxdeveloper.com are now retired. The forum archive will remain available for the time being. Thank you for your participation on slxdeveloper.com!
 Architect Forums - SalesLogix Scripting & Customization
Forum to discuss writing script in Architect plugins for SalesLogix & general SalesLogix customization topics (for Windows client only). View the code of conduct for posting guidelines.
Forums RSS Feed


 Back to Forum List | Back to SalesLogix Scripting & Customization | New ThreadView:  Search:  
 Author  Thread: Integrating QAS Pro API
Andrew Grandin
Posts: 272
 
Integrating QAS Pro APIYour last visit to this thread was on 1/1/1970 12:00:00 AM
Posted: 29 Sep 09 10:54 AM
Has anyone successfully integrated the QAS Pro API into SaleLogix for address validation using QAS but with data entry in SalesLogix rather than the QAS Pro UI?

EDIT: forgot to mention we are using version 7.2.
[Reply][Quote]
LeVar Berry
Posts: 47
 
Re: Integrating QAS Pro APIYour last visit to this thread was on 1/1/1970 12:00:00 AM
Posted: 02 Oct 09 8:29 PM
Never even heard of QAS Pro until now, but I like it!

Seems pretty straight forward... They're just .dll's and you pass params to their functions and get results back.

Are you having trouble accessing the .dlls?
[Reply][Quote]
Andrew Grandin
Posts: 272
 
Re: Integrating QAS Pro APIYour last visit to this thread was on 1/1/1970 12:00:00 AM
Posted: 05 Oct 09 2:06 AM
Everything i have done with .dll's in SLX so far have involved .Net extensions through the extensions manager but the .dll for QAS Pro is not a valid .Net Extension.
[Reply][Quote]
Raul A. Chavez
Posts: 1300
Top 10 forum poster: 1300 posts
 
Re: Integrating QAS Pro APIYour last visit to this thread was on 1/1/1970 12:00:00 AM
Posted: 05 Oct 09 3:58 AM
You need to figure out what kind of DLLs these are.

Regardless of the type, you could Link into them via a Custom .Net Extension.
If the DLLs are either .Net or COM, you could easily add them as a Reference within your .Net Extension code. IF they are COM and you know the Object Model you could as well invoke them directly from your VB Script.

If they are C style DLLs (e.g. Win32 APIs) then you will need to get a list of the Exported functions and Declare them on your .Net code (goofle for "P/Invoke" or "Interop" if needed). Also, you could be able to use Declares on Legacy Scripts (I am not recommending you do so, just mentioning the fact that it used to be possible, haven't tried it on any SLX newer than 5.x)
[Reply][Quote]
Andrew Grandin
Posts: 272
 
Re: Integrating QAS Pro APIYour last visit to this thread was on 1/1/1970 12:00:00 AM
Posted: 05 Oct 09 4:23 AM
Hi Raul,

your first reccomendation went through my mind earlier but when i try to add reference in my .Net Extension to any of the QAS Pro .dll's i get an error:

Error loading code-completion information for QAUWVED from C:\Program Files\Qas\Qas Pro Api\QAUWVED.DLL:
Error loading assembly:
Mono.Cecil.Binary.ImageFormatException: The image is not a managed assembly
at Mono.Cecil.StructureReader..ctor(ImageReader ir)
at Mono.Cecil.AssemblyFactory.GetAssembly(ImageReader irv, Boolean manifestOnly)
at Mono.Cecil.AssemblyFactory.GetAssembly(String file)
at ICSharpCode.SharpDevelop.Dom.CecilReader.LoadAssembly(String fileName, ProjectContentRegistry registry)
at ICSharpCode.SharpDevelop.Dom.ProjectContentRegistry.LoadProjectContent(String itemInclude, String itemFileName)
at ICSharpCode.SharpDevelop.Dom.ProjectContentRegistry.GetProjectContentForReference(String itemInclude, String itemFileName)
[Reply][Quote]
Raul A. Chavez
Posts: 1300
Top 10 forum poster: 1300 posts
 
Re: Integrating QAS Pro APIYour last visit to this thread was on 1/1/1970 12:00:00 AM
Posted: 05 Oct 09 4:35 AM
Did you try adding it from the COM tab as well?



[Reply][Quote]
Andrew Grandin
Posts: 272
 
Re: Integrating QAS Pro APIYour last visit to this thread was on 1/1/1970 12:00:00 AM
Posted: 05 Oct 09 4:51 AM
I have been through the entire list and none of the dll's in the QAS folder appear in the list under the COM tab.
[Reply][Quote]
john
Posts: 34
 
Re: Integrating QAS Pro APIYour last visit to this thread was on 1/1/1970 12:00:00 AM
Posted: 05 Oct 09 5:57 AM
There is a QAS Pro API help file installed with the product that explains exactly how to call it, and gives examples. There is no COM layer (at least in the version we use), so you will have to wrap the C API declares with either PInvoke or a COM layer or something similar. It can be integrated with SalesLogix easily.
[Reply][Quote]
Andrew Grandin
Posts: 272
 
Re: Integrating QAS Pro APIYour last visit to this thread was on 1/1/1970 12:00:00 AM
Posted: 05 Oct 09 6:44 AM
Thanks for your reply and i have do doubt that you are right, but could you provide any more detailed instruction please as this area is entirely new to me.
[Reply][Quote]
john
Posts: 34
 
Re: Integrating QAS Pro APIYour last visit to this thread was on 1/1/1970 12:00:00 AM
Posted: 05 Oct 09 7:26 AM
without wishing to sound unhelpful, what is it you want to know?
[Reply][Quote]
Andrew Grandin
Posts: 272
 
Re: Integrating QAS Pro APIYour last visit to this thread was on 1/1/1970 12:00:00 AM
Posted: 05 Oct 09 7:32 AM
basically how to get the dll working in vb.Net (as a start im just trying to get the QAProWV_UIStartup function working to just open an instance of the API). Ive tried various online examples and sample code but have had no luck. Thanks for your help and your time
[Reply][Quote]
john
Posts: 34
 
Re: Integrating QAS Pro APIYour last visit to this thread was on 1/1/1970 12:00:00 AM
Posted: 05 Oct 09 7:50 AM
By the sounds of the API function it looks like your version of the API might be different to mine (ours is very old)...

The .net extension class is in c#:

using System;
using System.Runtime.InteropServices;
using System.Text;
using Sage.SalesLogix.NetExtensions;
using Sage.SalesLogix.NetExtensions.SalesLogix;
using Sage.SalesLogix.NetExtensions.Licensing;
using System.ComponentModel;

namespace QASWrapper
{
[ComVisible(true), ProgId("QASWrapper.SLXWrapper")]
public class SLXWrapper : Component, IRunnable
{
//Saleslogix .net extension methods
public void Initialize(ISlxApplication SlxApplication, ILicenseKeyManager LicenseKeyManager)
{

}

public object Run(object[] Args)
{
return this;
}

public int QAProUI_Startup(String vs1, String vs2, String vs3, int vl4)
{
return QASAPI.QAProUI_Startup(vs1, vs2, vs3, vl4);
}

public int QAProUI_DPPopup(String vs1, String rs2, int vi3, String vs4, int ri5)
{
StringBuilder returnString = new StringBuilder(vi3);
int returnCode = QASAPI.QAProUI_DPPopup(vs1, returnString, vi3, vs4, ri5);
rs2 = returnString.ToString();
return returnCode;
}

public int QAProUI_Popup(String vs1, out String rs2, int vi3)
{
StringBuilder returnString = new StringBuilder(vi3);
int returnCode = QASAPI.QAProUI_Popup(vs1, returnString, vi3);
rs2 = returnString.ToString();
return returnCode;
}

public int QAProUI_Config(String vs1)
{
return QASAPI.QAProUI_Config(vs1);
}

public void QAProUI_IniSection(String rs1, int vi2)
{
StringBuilder returnString = new StringBuilder(vi2);
QASAPI.QAProUI_IniSection(returnString, vi2);
rs1 = returnString.ToString();
}

public void QAErrorMessage(int vi1, out String rs2, int vi3)
{
StringBuilder errorMessage = new StringBuilder(vi3);
QASAPI.QAErrorMessage(vi1, errorMessage, vi3);
rs2 = errorMessage.ToString();
}

public void QAInitialise(int vi1)
{
QASAPI.QAInitialise(vi1);
}

public void QAProUI_Shutdown(int vi1)
{
QASAPI.QAProUI_Shutdown(vi1);
}
}

internal sealed class QASAPI
{
[DllImport("QAPROEA.DLL", SetLastError = true)]
public static extern int QAProUI_Startup(String vs1, String vs2, String vs3, int vl4);

[DllImport("QAPROEA.DLL", SetLastError = true)]
public static extern int QAProUI_DPPopup(String vs1, StringBuilder rs2, int vi3, String vs4, int ri5);

[DllImport("QAPROEA.DLL", SetLastError = true)]
public static extern int QAProUI_Popup(String vs1, StringBuilder rs2, int vi3);

[DllImport("QAPROEA.DLL", SetLastError = true)]
public static extern int QAProUI_Config(String vs1);

[DllImport("QAPROEA.DLL", SetLastError = true)]
public static extern void QAProUI_IniSection(StringBuilder rs1, int vi2);

[DllImport("QAPROEA.DLL", SetLastError = true)]
public static extern void QAErrorMessage(int vi1, StringBuilder rs2, int vi3);

[DllImport("QAPROEA.DLL", SetLastError = true)]
public static extern void QAInitialise(int vi1);

[DllImport("QAPROEA.DLL", SetLastError = true)]
public static extern void QAProUI_Shutdown(int vi1);
}
}

This is then used in SLX ActiveScript to pass an address and, via the QAS Pro UI, return a "Quick Addressed" address:
Function CallQAS(v_sQASIniLocation, r_sAddress1, r_sAddress2, r_sCity, r_sCounty, r_sPostCode, r_bQASChecked, v_bSkipDuplicateCheck)
Dim extension
Dim guid
Dim lRet
Dim RetBuff
Dim sSearchString
Dim asAddress
Dim bCheckedForDuplicate

CallQAS = true

guid = Application.Managed.Create("QASWrapper", "QASWrapper.SLXWrapper")
set extension = Application.Managed.Run(guid, nothing)

extension.QAInitialise(1)
lRet = extension.QAProUI_Startup("Sales Logix - QAS", v_sQASIniLocation, "QADefault", 1)
if lRet >= 0 then
RetBuff = space(300)

Call AddToSearchString(r_sAddress1, sSearchString)
Call AddToSearchString(r_sAddress2, sSearchString)
Call AddToSearchString(r_sCity, sSearchString)
Call AddToSearchString(r_sCounty, sSearchString)
Call AddToSearchString(r_sPostCode, sSearchString)

lRet = extension.QAProUI_Popup(sSearchString, RetBuff, 300)
if lRet >= 0 then
asAddress = Split(RetBuff, Chr(10))
if v_bSkipDuplicateCheck then
bCheckedForDuplicate = True
else
bCheckedForDuplicate = CheckForDuplicate(asAddress, namContact.NameLast)
end if
if (bCheckedForDuplicate) then
r_sAddress1 = asAddress(0)
r_sAddress2 = asAddress(1)
r_sCity = asAddress(2)
r_sCounty = asAddress(3)
r_sPostCode = asAddress(4)
r_bQASChecked = True
else
r_bQASChecked = False
CallQAS = False
end if
else
RetBuff = space(100)
Call extension.QAErrorMessage(lRet, RetBuff, 100)
call msgbox(RetBuff)
end if
else
RetBuff = space(100)
Call extension.QAErrorMessage(lRet, RetBuff, 100)
call msgbox(RetBuff)
end if
extension.QAProUI_Shutdown(0)
Set extension = Nothing
Call Application.Managed.Destroy(guid)
End Function

We could also remove the QAS Pro UI if we wish and build our own - however the QAS version is fine for our use.
[Reply][Quote]
Andrew Grandin
Posts: 272
 
Re: Integrating QAS Pro APIYour last visit to this thread was on 1/1/1970 12:00:00 AM
Posted: 05 Oct 09 7:57 AM
Thank you very much for your help on this. I will take what youve given away and see what i can do thanks again.

P.S we have QAS Pro V6 (i think it is the most recent)
[Reply][Quote]
Rowland Dexter
Posts: 10
 
Re: Integrating QAS Pro APIYour last visit to this thread was on 1/1/1970 12:00:00 AM
Posted: 06 Oct 09 3:59 AM
Hi Andrew, we support integration via our PowerEntry add-on for Slx LAN client. It not only provides great de-duplication at point of entry but enhances the whole user experience around adding an account and/or contact. It also integrates QAS not only at point of entry but also as part of the address management process, which we have again improved. We do support a number of address management providers including QAS, GB Group (via web services) etc. There is a 15 day trial on the down load if you want to apply it to a test system and see for yourself.

For completeness sake, with regards to the SLx Web client we support the de-dupe function as per the LAN client but not yet implemented address management, as we simply have not had the demand for it.

Take a look at http://www.qgate.co.uk/powerentry/

Regards,
Rowland.
[Reply][Quote]
Andrew Grandin
Posts: 272
 
Re: Integrating QAS Pro APIYour last visit to this thread was on 1/1/1970 12:00:00 AM
Posted: 06 Oct 09 4:07 AM
Hi Rowland, thanks for your reply. I did look into PowerEntry before QAS Pro but we want post-entry checking on addresses.

I did reccomend QAS Batch for this but we still went down the Pro route for some reason. Basically what is wanted is a button on the Account View of SalesLogix that passes the address into QAS Pro which checks it and returns either the correct address or a list of possibilities.
[Reply][Quote]
Rowland Dexter
Posts: 10
 
Re: Integrating QAS Pro APIYour last visit to this thread was on 1/1/1970 12:00:00 AM
Posted: 14 Oct 09 3:56 AM
Ok Andrew, hope you get the integration you need from the previous posts.

Should you aim to use batch address clean up at any point in the future, we have developed a utility to extract addresses, based on a group (i.e. UK only accounts). The format is pre-defined to be used with QAS batch. you then run the batch update process. The utility will then suck the updated addreses back into SLx, marking each record with a success code, ensuring the normal cascading of address to contacts, etc and obviously supporting sync. A second run can then be carried out against those contact addresses that are unique from the account address. We can offer the utility at a fair price if you already have QAS, but could also exectue for you on a service basis if you wanted to do a one off clean. It is a service we are about to offer to partners/customers. Please feel free to drop me a line if you are interested. rowland.dexter@qgate.co.uk rgds, Rowland.
[Reply][Quote]
 Page 1 of 1 
  You can subscribe to receive a daily forum digest in your user profile. View the site code of conduct for posting guidelines.

   Forum RSS Feed - Subscribe to the forum RSS feed to keep on top of the latest forum activity!
 

 
 slxdeveloper.com is brought to you courtesy of Ryan Farley & Customer FX Corporation.
 This site, and all contents herein, are Copyright © 2025 Customer FX Corporation. The information and opinions expressed here are not endorsed by Sage Software.

code of conduct | Subscribe to the slxdeveloper.com Latest Article RSS feed
   
 
page cache (param): 8/29/2025 3:20:01 PM