Mini Kabibi Habibi

Current Path : C:/Users/ITO/Desktop/VF9/program files/microsoft visual foxpro 9/ffc/
Upload File :
Current File : C:/Users/ITO/Desktop/VF9/program files/microsoft visual foxpro 9/ffc/_ws3utils.vct

��VERSION =   3.00)MS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0

wsbasebuilderPixelsClass1builderbaseform
wsbasebuilder�wsname
port
wsdl
wsml
service
wsmethod
wsparmquery
wssyntax
wsparmnum
wsparms
*setup 
*updatemethod 
*updateparms 

3�� 

�%��	q��U�����������T���a��R�%�����R�
���	�B�-���R�%�C�oObjectb�O����
T������mT��CEC�
 C�
 �
Builder:     ��
C�
 C�
 �
Object:      ��
C�
 �Method:    ���T��C�E��%%�C���'����...
	����-T���C�
 �Line:         CC�Z���%�C��
����T���C�
 C�
 �����%�-������C��x��G1 �X����%�C�����x�����T���a��
���	�B�-����UNERRORCMETHODNLINEOOBJECT
LCERRORMSG
LCCODELINEMSGTHISLERRORLRELEASERELEASENAMECAPTION������%�C�	toObject2b�O��3�B�-���%�C����
��X�B�-���
��C����%���
����
�����U	TOOBJECT2	TUSOURCE2
TLSKIPSEARCH2THISSETUPLRELEASESHOW]�����������
������-%���C��C�toObjectb�O����%%�C�toObjectb�O�C������T�����������%�C��
����9R,:���	�' Error Mode:  Object parameter required���B�-������T��C���`��%�������
�����T��C����`��%�������%%�C���C�toObjectb�O����0R,:���	� Error Mode:  Nothing selected��B�-���T�����������T��
����T���C����,%�C�this.oObjectb�O�	C�����n�T����T���-��T��
����T������
����B�-���!T�����������%�������T��
������T���C����]����T��
������T���������T�������T������T��-��
�����T��C���`��T��-��%%��
������	���%�������
�����T��C����`���%������T��CC���@��&%��C�@��C���@	���T��a�����T������T��-��%�C��
��V�B�-���UTOOBJECTTUSOURCETLSKIPSEARCH
LNSELOBJCOUNTLCOBJECTNAMELCNAMELLCLASSLASELOBJTHISCAPTIONUSOURCEOOBJECTLCLASSCCLASS
CCLASSLIBRARYRELEASENAMECLASSCLASSLIBRARYCOBJECTNAME
ADDOBJECTSError,��Init���	setobjectg��11��Q�qAQ��A��R��AA��aA����qAA4��qA�qA��A2�1��Q1��AqA�!�QQqA1AAAA����qAa��aaA1��!�Q�QAaa�AAA�"qA2b!}c--�R>)
ATop = 0
Left = -1
Height = 275
Width = 440
Desktop = .T.
DoCreate = .T.
BorderStyle = 3
Caption = "XML Web Service Builder"
MinHeight = 200
MinWidth = 200
Icon = ..\
wsname = 
port = 
wsdl = 
wsml = 
service = 
wsmethod = 
wsparmquery = 0
wssyntax = 
wsparmnum = 0
wsparms = 
Name = "wsbasebuilder"
form..\wizards\builderd.vcx_ws3.ho���-1KMS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
Tahoma, 0, 8, 5, 13, 11, 21, 2, 0

wsbuilder3_ws3.hPixelsClass17
wsbasebuilder
wsbuilder3)Top = 78
Left = 348
Name = "Colparms"

wsbuilder3Colparms
collection_ws3client.vcxcolparmsCTop = 78
Left = 324
Height = 25
Width = 24
Name = "Wshandler"

wsbuilder3	Wshandlercustom_ws3client.vcx	wshandler �� �4%����U<T�������T�������T�������UTHISFORM	CBOTABLESDISPLAYVALUE	CBOFIELDS	CBOVALUESClick,��11112�)
wsbuilder3label1�PROCEDURE Click
THISFORM.cboTables.DisplayValue = ""
THISFORM.cboFields.DisplayValue = ""
THISFORM.cboValues.DisplayValue=""

ENDPROC
cmdReset
commandbutton
commandbutton
wsbuilder31]PROCEDURE Error
LPARAMETERS nError, cMethod, nLine, oObject

#DEFINE DEBUGMODE	.F.
#DEFINE CR	CHR(13)+CHR(10)

LOCAL lcErrorMsg, lcCodeLineMsg

this.lError=.T.
WAIT CLEAR
IF this.lRelease
	this.Release
	RETURN .F.
ENDIF
WAIT CLEAR
IF TYPE("oObject")#"O"
	oObject=this
ENDIF
lcErrorMsg=MESSAGE()+CHR(13)+CHR(13)+"Builder:     "+this.Name+CR+ ;
		"Object:      "+oObject.Name+CHR(13)+ ;
		"Method:    "+cMethod
lcCodeLineMsg=MESSAGE(1)

IF BETWEEN(nLine,1,10000) AND NOT lcCodeLineMsg="..."
	lcErrorMsg=lcErrorMsg+CHR(13)+"Line:         "+ALLTRIM(STR(nLine))
	IF NOT EMPTY(lcCodeLineMsg)
		lcErrorMsg=lcErrorMsg+CHR(13)+CHR(13)+lcCodeLineMsg
	ENDIF
ENDIF

IF DEBUGMODE
	MESSAGEBOX(lcErrorMsg)
	SET STEP ON 
	RETRY
ELSE
	IF MESSAGEBOX(lcErrorMsg,17,this.Caption)#1
		this.lRelease=.T.
		this.Release
		RETURN .F.
	ENDIF
ENDIF


ENDPROC
PROCEDURE Init
LPARAMETER toObject2, tuSource2, tlSkipSearch2

IF TYPE("toObject2")#"O"
	RETURN .F.
ENDIF

IF NOT DODEFAULT(toObject2, tuSource2, tlSkipSearch2)
	RETURN .F.
ENDIF

THIS.Setup()

IF NOT this.lRelease
	this.Show
ENDIF
ENDPROC
PROCEDURE setobject
LPARAMETERS toObject,tuSource,tlSkipSearch
LOCAL lnSelObjCount,lcObjectName,lcName,llClass
LOCAL laSelObj[1]
IF tlSkipSearch OR PARAMETERS()=1 OR TYPE("toObject")=="O"
	IF TYPE("toObject")=="O" OR ISNULL(toObject)
		laSelObj[1]=toObject
	ELSE
		IF NOT ISNULL(toObject)
			WAIT WINDOW this.Caption+ ;
					" Error Mode:  Object parameter required" NOWAIT
		ENDIF
		RETURN .F.
	ENDIF
ELSE
	lnSelObjCount=ASELOBJ(laSelObj)
	IF lnSelObjCount=0
		DIMENSION laSelObj[1]
		lnSelObjCount=ASELOBJ(laSelObj,1)
		IF lnSelObjCount=0
			IF ISNULL(toObject) OR TYPE("toObject")#"O"
				WAIT WINDOW this.Caption+ ;
						" Error Mode:  Nothing selected" NOWAIT
				RETURN .F.
			ENDIF
			laSelObj[1]=toObject
		ENDIF
	ENDIF
ENDIF
this.uSource=tuSource
this.oObject=laSelObj[1]
IF TYPE("this.oObject")#"O" OR ISNULL(this.oObject)
	this.oObject=.NULL.
	this.lClass=.F.
	this.cClass=""
	this.cClassLibrary=""
	this.Release
	RETURN .F.
ENDIF
this.lClass=(this.oObject.Name==this.oObject.Class)
IF this.lClass
	this.cClass=this.oObject.Name
	this.cClassLibrary=SYS(1271,this.oObject)
ELSE
	this.cClass=this.oObject.Class
	this.cClassLibrary=this.oObject.ClassLibrary
ENDIF
lcObjectName=this.oObject.Name
this.cObjectName=lcObjectName
laSelObj=.F.
DIMENSION laSelObj[1]
lnSelObjCount=ASELOBJ(laSelObj)
llClass=.F.
IF NOT llClass AND (lnSelObjCount=0 OR lnSelObjCount=1)
	IF lnSelObjCount=0
		DIMENSION laSelObj[1]
		lnSelObjCount=ASELOBJ(laSelObj,1)
	ENDIF
	IF lnSelObjCount=1
		lcName=LOWER(laSelObj[1].Name)
		IF lcName==LOWER(lcObjectName) AND lcName==LOWER(this.oObject.Class)
			llClass=.T.
		ENDIF
	ENDIF
ENDIF
this.lClass=llClass
laSelObj=.F.

IF NOT this.AddObjects()
	RETURN .F.
ENDIF

ENDPROC
�Top = 258
Left = 80
Height = 23
Width = 60
FontName = "Tahoma"
FontSize = 8
Caption = "\<Reset"
TabIndex = 11
ZOrderSet = 6
Name = "cmdReset"
�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "\<Values:"
Height = 15
Left = 48
Top = 216
Width = 37
TabIndex = 8
ZOrderSet = 5
Name = "Label4"
Label4label�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Enabled = .F.
Height = 24
Left = 132
TabIndex = 9
Top = 210
Width = 240
ZOrderSet = 4
BorderColor = 0,128,192
ItemTips = .T.
Name = "cboValues"

wsbuilder3	cboValuescomboboxcombobox�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Height = 24
Left = 132
TabIndex = 6
Top = 136
Width = 240
ZOrderSet = 4
Name = "cboFields"

wsbuilder3	cboFieldscomboboxcombobox�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "Table \<fields:"
Height = 15
Left = 48
Top = 140
Width = 60
TabIndex = 5
ZOrderSet = 5
Name = "Label3"

wsbuilder3Label3labellabel�� ��o�%lct{�U0	�������������	�
���T��C�
�����T��C�
�����%��
��������e��C�YThe builder cannot query complex types for parameters. You need to manually enter values.�x��B��%��
�������n�0T��C�wsParmsC�Q�FFC\_ws3client.vcx���T����
�����
��C������C������%�C�
���
��
���3T�
��&The Web service could not be accessed.��%�C�
���
���/T�
��
C�
 C�
 C�
 C�
 �
�������C�
�x��B��T���
����
H�@���C����O����.%�C����C�CCC���=@�<?xml	��a����T��a����C����%�CٞThe builder has detected that the Web service returns an XML string that can be converted to a Fox cursor. Would you like to view the resulting cursor schema?�$�x�������C�
������C�
������CC�
�� �������(�C.������CC�
�/�
�� ����T�
������T�
������T��a�����T��-�����]�H��C�<The Web service did not return a valid complex type (object)�x��T��-�������H��C�<The Web service did not return a valid complex type (object)�x���%��
����B��#�C�leRetVal.lengthb�N��o�%���!���N�H��C�<The Web service did not return a valid complex type (object)�x��B��/T��C�	IsDataSetCC���"�#�	꾸���
%������%�C��
��
��$����#�����(��
��%�&����#T��C�
��
��%�&�"�'����C��
�� ����
H������
��(���.��C����P�T�
������2��������(��
��(����"%�CC�
��
��)fC�f����T�
����
���T�	�a��!����%��	
����T�
��������
��C�
�*����k������(���!��g�!%�C�
����"�+���c�#��CC�
����"�,�
�� ������2��
�����T��C�����b��
T����������(�����%��C�
�������.����CC�
����
�� ��T��C�
�������� %�C����
��(�	��R�T�
�������T�
��-����T�
��-����T�
��-��
��T�
�.�/�-����T�
�.�0�-��
��!T�
�.�1�C�����6��,%��
�2��	�C�
��%���O	��	�T�
�3�-�a���T�4�-�-��U5
LOPARMFORMLHASDATASETLERETVALILAPEMS	LCLASTPEMLNCOUNT
LCOLDTABLE
LCOLDVALUELFOUNDLCERRMSGLCALIASLSUCCESSTHISFORM	CBOTABLESDISPLAYVALUE	CBOVALUESOCALLEECBOBIND	LISTINDEX
OOPERATIONCOLPARMSCOUNT	OCOLPARMSSETUPWSSHOW	WSHANDLERINVOKESOAPERRORDETAILRETURNVALUECLEAR	CBOFIELDSADDITEMLENGTHITEMXML
GENDATASETOADAPTERTABLESALIAS	LISTCOUNTLISTUPDATEFIELDSNODETYPENODENAMEENABLEDOPTIONGROUP1OPTION1OPTION2VALUELHASCURSORADAPTER	CMDATTACHTHISClick,��1��RQ�QAA���A�1a�A�AA2�Q����Q!aqA11���A���A��A�AA2B�AA���11AA�q�1��!Q�AAA�1AA�A��1AAA����q�AA�qAB1A21Aaq�A�1�
)�
�PROCEDURE Click
LOCAL loParmForm, lHasDataSet, leRetVal, i, laPEMs, lcLastPem, lnCount
LOCAL lcOldTable, lcOldValue, lFound, lcErrMsg, lcAlias, lSuccess

lcOldTable = ALLTRIM(THISFORM.cboTables.DisplayValue)
lcOldValue =	ALLTRIM(THISFORM.cboValues.DisplayValue)

IF THISFORM.oCallee.cboBind.ListIndex#1
	MESSAGEBOX(NOCOMPLEXPARM_LOC)
	RETURN
ENDIF

IF THISFORM.oCallee.oOperation.colParms.Count>0
	loParmForm = NEWOBJECT("wsParms", HOME()+"FFC\_ws3client.vcx")
	loParmForm.oColParms = THISFORM.oCallee.oOperation.colParms
	loParmForm.SetupWS()
	loParmForm.Show(1)
ENDIF

IF !THISFORM.wshandler.Invoke(THISFORM.oCallee.oOperation)
	lcErrMsg = BADTYPE1_LOC
	IF !EMPTY(THISFORM.wshandler.SoapErrorDetail)
		lcErrMsg = lcErrMsg +CRLF +CRLF + THISFORM.wshandler.SoapErrorDetail
	ENDIF
	MESSAGEBOX(lcErrMsg)
	RETURN
ENDIF

leRetVal = THISFORM.wsHandler.ReturnValue

DO CASE
CASE VARTYPE(leRetVal) #"O"

	IF VARTYPE(leRetVal) ="C" AND LOWER(LEFT(ALLTRIM(leRetVal),5))="<?xml"
		TRY
			lSuccess=.T.
			XMLTOCURSOR(leRetVal)
			IF MESSAGEBOX(XMLHASCURSOR_LOC,36)=6
				THISFORM.cboTables.Clear()
				THISFORM.cboFields.Clear()
				THISFORM.cboTables.AddItem(ALIAS())
				FOR i = 1 TO FCOUNT()
					THISFORM.cboFields.AddItem(FIELD(m.i))
				ENDFOR
				THISFORM.cboTables.ListIndex=1
				THISFORM.cboFields.ListIndex=1
				lHasDataSet=.T.
			ELSE
				lSuccess=.F.
			ENDIF
		CATCH
			MESSAGEBOX(BADTYPE2_LOC)		
			lSuccess=.F.
		ENDTRY
	ELSE
		MESSAGEBOX(BADTYPE2_LOC)		
	ENDIF
	IF !lSuccess
		RETURN
	ENDIF

CASE TYPE("leRetVal.length")="N"

	IF leRetVal.length=0
		MESSAGEBOX(BADTYPE2_LOC)
		RETURN
	ENDIF

	lHasDataSet = ATC("IsDataSet", STRCONV(leRetVal.item(0).xml,9))#0
	IF lHasDataSet
		IF THISFORM.wshandler.GenDataset(leRetVal, THISFORM.wshandler)
			FOR i = 1 TO THISFORM.wshandler.oAdapter.Tables.Count
				lcAlias = THISFORM.wshandler.oAdapter.Tables.Item(m.i).Alias
				THISFORM.cboTables.AddItem(lcAlias)
			ENDFOR
			DO CASE
			CASE THISFORM.cboTables.ListCount=0
			CASE EMPTY(lcOldTable)
				THISFORM.cboTables.ListIndex=1
			OTHERWISE
				* Need to loop through items to ensure valid table
				FOR i = 1 TO THISFORM.cboTables.ListCount
					IF UPPER(THISFORM.cboTables.List(m.i))==UPPER(lcOldTable)
						THISFORM.cboTables.ListIndex=m.i
						lFound=.T.
						EXIT
					ENDIF
				ENDFOR
				IF !lFound
					THISFORM.cboTables.ListIndex=1
				ENDIF
			ENDCASE
			THISFORM.UpdateFields()
		ENDIF
	ELSE
		* Has XMLDOMNode object
		FOR i = 1 TO leRetVal.Length
			IF leRetVal.item(m.i-1).nodeType=1 	&&handle Elements only
				THISFORM.cboValues.AddItem(leRetVal.item(m.i-1).nodeName)
			ENDIF
		ENDFOR
	ENDIF

OTHERWISE

	* Has COM Object here
	DIMENSION laPEMs[1]
	lnCount = AMEMBERS(laPEMs, leRetVal, 3)
	lcLastPem = ""
	FOR i = 1 TO lnCount
		IF lcLastPem==laPEMs[m.i, 1]
			LOOP
		ENDIF
		THISFORM.cboValues.AddItem(laPEMs[m.i, 1])
		lcLastPem = laPEMs[m.i, 1]
	ENDFOR

ENDCASE

IF EMPTY(lcOldValue) AND THISFORM.cboValues.ListCount>0
	THISFORM.cboValues.ListIndex=1
ENDIF

THISFORM.cboTables.Enabled = lHasDataSet
THISFORM.cboFields.Enabled = lHasDataSet
THISFORM.cboValues.Enabled = !lHasDataSet
THISFORM.Optiongroup1.Option1.Enabled=lHasDataSet
THISFORM.Optiongroup1.Option2.Enabled=!lHasDataSet
THISFORM.Optiongroup1.Value = IIF(lHasDataSet, 1, 2)
IF THISFORM.lHasCursorAdapter AND lHasDataSet AND VARTYPE(THISFORM.wshandler.oAdapter)="O"
	THISFORM.cmdAttach.Enabled=.T.
ENDIF
THIS.Enabled=.F.
ENDPROC
�Top = 258
Left = 16
Height = 23
Width = 60
FontName = "Tahoma"
FontSize = 8
Caption = "\<Query"
TabIndex = 10
ZOrderSet = 6
Name = "cmdQuery"

wsbuilder3cmdQuery
commandbutton
commandbutton�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "Dataset \<tables:"
Height = 15
Left = 48
Top = 112
Width = 76
TabIndex = 3
ZOrderSet = 5
Name = "Label1"

wsbuilder3Label1labellabel�� ��6v%Xmg�U
��C����UTHISFORMATTACHSCHEMAClick,��1�1()�3PROCEDURE Click
THISFORM.AttachSchema()
ENDPROC
�Top = 258
Left = 157
Height = 23
Width = 84
FontName = "Tahoma"
FontSize = 8
Caption = "\<Attach Schema"
Enabled = .F.
TabIndex = 12
ZOrderSet = 6
Name = "cmdAttach"

wsbuilder3	cmdAttach
commandbutton
commandbutton�Top = 162
Left = 48
Height = 15
Width = 196
FontName = "Tahoma"
FontSize = 8
AutoSize = .T.
BackStyle = 0
Caption = "\<Use existing cursor if already opened"
Value = .T.
ControlSource = ""
TabIndex = 7
ZOrderSet = 5
Name = "chkExisting"

wsbuilder3chkExistingcheckboxcheckbox�� ����%Xys�U
��C����UTHISFORMUPDATEFIELDSInteractiveChange,��1�14)�?PROCEDURE InteractiveChange
THISFORM.Updatefields()
ENDPROC
�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Height = 24
Left = 132
TabIndex = 4
Top = 108
Width = 240
ZOrderSet = 4
Name = "cboTables"

wsbuilder3	cboTablescomboboxcombobox�� ���%Shb�U
��C����UTHISFORMRELEASEClick,��1�1#)�
wsbuilder3	cmdCancel_ws3.h&����-olecontrols_ws3.hPixelsClass
olecontrololecontrols�ccheckedkey
ccontrolname
ccontrolpath
lincludede
ldataenv
parentkey
dekey
ocontainer Reference to outer most container.
odataenv
*getcontrols 
*isindataenv 
.OLEObject = C:\WINDOWS\System32\mscomctl.ocx
��ࡱ�>��	��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Root Entry���������xt����OleObjectData�����AccessObjSiteData&������������\ChangedProps������������
����	��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Alj���j��(6(!C4
D�<�j"=�	y��ͫ\$89368265E-85FE-11d1-8BE3-0000F8754DA1�HideSelectionLIndentationN
H����.����R�������K�Q�C@
LabelEdit	I

LineStyle	I

MousePointer	I
PathSeparator
H.OLEDragMode	I
OLEDropMode	I
CheckboxesLumnHeaders� property. They DBTahoma added at both design and run time. At design time, you can use the Column Headers tab of the �ListView� Control Properties dialog box. At run time, use the �Add� method to add a �ColumnHeader� object to the �ColumnHea.PROCEDURE Click
THISFORM.Release()
ENDPROC
�Top = 258
Left = 328
Height = 23
Width = 60
FontName = "Tahoma"
FontSize = 8
Cancel = .T.
Caption = "Cancel"
TabIndex = 14
ZOrderSet = 3
Name = "cmdCancel"

commandbutton
commandbutton$�� �v%����U���������%�������a�T��C������T��C������T�	�������T�����T�����T�	�C��
�����T���������
��C��
��UTHISFORMOCALLEEOPTIONGROUP1VALUEDSTABLE	CBOTABLESDISPLAYVALUEDSFIELD	CBOFIELDSNODENAME	CBOVALUESDSUSEEXISTINGCURSORCHKEXISTINGRELEASEClick,��1qaa����aAAA�2�)�PROCEDURE Click
WITH THISFORM.oCallee
	IF THISFORM.Optiongroup1.Value=1
		.DSTable = ALLTRIM(THISFORM.cboTables.DisplayValue)
		.DSField = ALLTRIM(THISFORM.cboFields.DisplayValue)
		.NodeName = ""
	ELSE
		.DSTable = ""
		.DSField = ""
		.NodeName = ALLTRIM(THISFORM.cboValues.DisplayValue)
	ENDIF
	.DSUseExistingCursor = THISFORM.chkExisting.Value
ENDWITH
THISFORM.Release()

ENDPROC
�Top = 258
Left = 264
Height = 23
Width = 60
FontName = "Tahoma"
FontSize = 8
Caption = "OK"
Default = .T.
TabIndex = 13
ZOrderSet = 2
Name = "cmdOK"

wsbuilder3cmdOK
commandbutton
commandbutton�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
WordWrap = .T.
BackStyle = 0
Caption = "You can specify advanced options such as ADO.Net Dataset table and field names or property values for your complex types. Type the value in the combo box or click the Query button to call your Web service and retrieve a list of available options."
Height = 54
Left = 12
Top = 12
Width = 365
TabIndex = 1
ZOrderSet = 1
Name = "Label2"

wsbuilder3Label2labellabel�� ��w%8o�UzT���������T���������&T����������
	��T���������U	THISFORM	CBOTABLESENABLEDTHISVALUE	CBOFIELDSCHKEXISTINGLHASCURSORADAPTER	CBOVALUES
��C����UTHISINTERACTIVECHANGEInteractiveChange,��ProgrammaticChange��1��a�2�1�2)�=PROCEDURE InteractiveChange
THISFORM.cboTables.Enabled = (THIS.Value=1)
THISFORM.cboFields.Enabled = (THIS.Value=1)
THISFORM.chkExisting.Enabled = (THIS.Value=1 AND !THISFORM.lHascursoradapter)
THISFORM.cboValues.Enabled = (THIS.Value=2)
ENDPROC
PROCEDURE ProgrammaticChange
THIS.InteractiveChange()
ENDPROC

wsbuilder3Optiongroup1optiongroupoptiongroup�ocallee Reserved.
lhascursoradapter Reserved.
*setupobjects Reserved.
*updatefields Reserved.
*checkcadapter Reserved.
*attachschema Reserved.
�Height = 292
Width = 399
DoCreate = .T.
AutoCenter = .T.
BorderStyle = 2
Caption = "XML Web Service - Complex Types"
MinWidth = 390
WindowType = 1
HelpContextID = 1231134
Name = "wsbuilder3"
form
_ws3utils.vcx_ws3.ho���-KMS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
16wstool.pf1.pgOptionslabelLabel1118{Height = 109
Width = 194
ccheckedkey = 
ccontrolname = 
ccontrolpath = 
parentkey = 
dekey = 
Name = "olecontrols"

olecontrol
wsbuilder4_ws3.hPixelsClass
wsbasebuilder
wsbuilder4)Top = 360
Left = 12
Name = "colParms"

wsbuilder4colParms
collection_ws3client.vcxcolparms
wsbuilder4lbldesclabellabel
wsbuilder4Label5labellabel
wsbuilder4	lblSyntaxlabellabel
wsbuilder4lblParmTypelabellabellabel
wsbuilder4txtValuetextboxtextbox
wsbuilder4Label4label_ws3.ho���-wstest_ws3.hPixelsClass17formPPROCEDURE getcontrols
LPARAMETERS loControl, lcParentKey

LOCAL laParent, laObjs, i, lnObjs, lcKey, lHadError
LOCAL loTreeViewObj, lnParent, loTmpObject 
LOCAL lcDEClassLib, lcDEClass

DIMENSION laObjs[1]
DIMENSION laParent[1]

lcKey = SYS(2015)

IF VARTYPE(loControl) # "O"
	* Called the first time through - passed a number (3 for form/class, 2 for DE)
	IF VARTYPE(loControl)#"N" OR !BETWEEN(loControl, 1, 3)
		RETURN
	ENDIF

	lnParent=loControl
	lcKey = SYS(2015)
	loControl=laParent[1]
	ASELOBJ(laParent, lnParent)
	loControl=laParent[1]

	DO CASE
	CASE lnParent=2
	
		THIS.dekey = lcKey
		IF ASELOBJ(laParent,3)=0
			RETURN
		ENDIF
		IF ATC(".VCX", laParent[2])#0		
			loControl = laParent[1]
			DO WHILE .T.
				IF UPPER(loControl.BaseClass)=="FORM" AND TYPE("loControl.DEClass")="C" AND !EMPTY(loControl.DEClass)
					lcDEClass = loControl.DEClass
					lcDEClassLib = loControl.DEClassLibrary
					EXIT
				ENDIF
				IF TYPE("loControl.Parent")#"O"
					EXIT
				ENDIF
				loControl = loControl.Parent
			ENDDO
			IF EMPTY(lcDEClass)
				RETURN
			ENDIF
			TRY
				lHadError=.T.
				IF MESSAGEBOX(PROMPTFORMCLASSDE_LOC,36)=6
					THIS.oDataEnv = NEWOBJECT(lcDEClass, lcDEClassLib)
					loControl = THIS.oDataEnv
					lHadError=.F.
				ENDIF
			CATCH
			ENDTRY
		ENDIF
		IF lHadError
			RETURN
		ENDIF
		
	CASE lnParent=2
		THIS.dekey = lcKey

	CASE lnParent=3 AND ATC(".TMP", laParent[2])#0
		* User has temp form name here
		MESSAGEBOX(SAVEFORMFIRST_LOC)
		RETURN .F.
	CASE lnParent=3 AND ATC(".VCX", laParent[2])#0
		* Need to find true top-level container since it could be a VCX. We
		* do this by traversing upward until we have a parent w/o a classlib.
		loTmpObject = loControl
		DO WHILE .T.
			DO CASE
			CASE UPPER(loTmpObject.BaseClass)=="FORM" AND !EMPTY(loTmpObject.ClassLibrary)
				loControl = loTmpObject
				EXIT
			CASE TYPE("loTmpObject.Parent")="O" AND UPPER(loTmpObject.Parent.BaseClass)=="FORMSET" 
				IF !EMPTY(loTmpObject.Parent.ClassLibrary)
					loControl = loTmpObject
				ENDIF
				EXIT
			OTHERWISE
				loControl = loTmpObject
				loTmpObject = loControl.Parent
			ENDCASE
		ENDDO
		THIS.oContainer=loControl
		THIS.parentkey = lcKey
	OTHERWISE
		DO WHILE .T.
			IF UPPER(loControl.BaseClass)="FORM" OR TYPE("loControl.Parent")#"O"
				EXIT
			ELSE
				loControl=loControl.Parent
			ENDIF
		ENDDO
		THIS.oContainer=loControl
		THIS.parentkey = lcKey
	ENDCASE
ENDIF

IF VARTYPE(lcParentKey)="C"
	loTreeViewObj=THIS.Nodes.Add(lcParentKey,4, lcKey, loControl.Name)
ELSE
	loTreeViewObj=THIS.Nodes.Add(,, lcKey, loControl.Name)
ENDIF

* Add objects to Objects Listbox
lnObjs = AMEMBERS(laObjs, loControl, 2)
FOR i = 1 TO lnObjs
	IF UPPER(loControl.&laObjs[m.i]..Class)="WSHANDLER"
		LOOP
	ENDIF
	THIS.GetControls(loControl.&laObjs[m.i]., lcKey)
ENDFOR

ENDPROC
PROCEDURE isindataenv
LPARAMETERS toNode
LOCAL loParent
loParent = toNode
DO WHILE .T.
	IF TYPE("loParent.Parent")#"O" OR ISNULL(loParent.Parent)
		EXIT
	ENDIF
	loParent = loParent.Parent
ENDDO
THIS.lDataenv= IIF(loParent.Key==THIS.DEKey, .T., .F.)
loParent=""
RETURN THIS.lDataenv

ENDPROC
PROCEDURE Destroy
THIS.oContainer=""
THIS.oDataEnv = ""
ENDPROC
PROCEDURE Init
THIS.Getcontrols(3)
IF THIS.lIncludeDE
	THIS.Getcontrols(2)
ENDIF
ENDPROC
PROCEDURE NodeCheck
*** ActiveX Control Event ***
LPARAMETERS node

LOCAL lcLastKey

lcLastKey = THIS.cCheckedkey
Node.Selected = .T.
IF node.Checked
	THIS.cCheckedKey = node.key
	THIS.cControlName = node.text
	THIS.cControlPath = node.fullpath
	IF !EMPTY(lcLastKey) AND !lcLastKey==THIS.cCheckedkey
		THIS.Nodes.Item(lcLastKey).Checked=.F.
	ENDIF
ELSE
	THIS.cCheckedKey = ""
	THIS.cControlName = ""
	THIS.cControlPath = ""
ENDIF

IF !THIS.lIncludeDE
	THIS.lDataenv=.F.
ELSE
	THIS.IsInDataEnv(node)
ENDIF
ENDPROC
�ButtonCount = 2
BackStyle = 0
Value = 1
ControlSource = ""
Height = 168
Left = 12
Top = 78
Width = 372
TabIndex = 2
ZOrderSet = 0
Name = "Optiongroup1"
Option1.FontName = "Tahoma"
Option1.FontSize = 8
Option1.Caption = "\<Dataset"
Option1.Value = 1
Option1.ControlSource = ""
Option1.Height = 15
Option1.Left = 10
Option1.Top = 10
Option1.Width = 56
Option1.AutoSize = .T.
Option1.Name = "Option1"
Option2.FontName = "Tahoma"
Option2.FontSize = 8
Option2.Caption = "\<Object"
Option2.ControlSource = ""
Option2.Height = 15
Option2.Left = 10
Option2.Top = 112
Option2.Width = 50
Option2.AutoSize = .T.
Option2.Name = "Option2"
�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
FontUnderline = .F.
WordWrap = .T.
BackStyle = 0
Caption = 'Please enter parameter values for your XML Web service operation. To specify an expression, preface the value with an "=" character. You can also specify a control and its property as an input source.'
Height = 41
Left = 12
Top = 12
Width = 349
TabIndex = 1
ZOrderSet = 13
Name = "lbldesc"
�AutoSize = .T.
FontBold = .F.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "Syntax:"
Height = 15
Left = 12
Top = 60
Width = 40
TabIndex = 2
ZOrderSet = 12
Name = "Label5"
�FontBold = .F.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = ""
Height = 36
Left = 60
Top = 60
Width = 332
TabIndex = 3
ZOrderSet = 12
Name = "lblSyntax"
�FontBold = .F.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = ""
Height = 36
Left = 12
Top = 264
Width = 120
TabIndex = 7
ZOrderSet = 12
Name = "lblParmType"
�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Height = 36
InputMask = (REPLICATE("X", 254))
Left = 168
MaxLength = 255
TabIndex = 10
Top = 151
Width = 216
ZOrderSet = 11
Name = "txtValue"
�AutoSize = .T.
FontBold = .F.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "\<Select parameter:"
Height = 15
Left = 12
Top = 104
Width = 88
TabIndex = 4
ZOrderSet = 9
Name = "Label4"
label�AutoSize = .T.
FontBold = .F.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "Parameter type:"
Height = 15
Left = 12
Top = 240
Width = 81
TabIndex = 6
ZOrderSet = 9
Name = "Label1"

wsbuilder4Label1labellabelwstool.pf1.pgOptions�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Height = 24
Left = 168
Style = 2
TabIndex = 12
Top = 312
Width = 216
ZOrderSet = 8
BorderColor = 0,128,192
ItemTips = .T.
Name = "cboPEMS"

wsbuilder4cboPEMScomboboxcombobox,OLEObject = C:\WINNT\System32\MSCOMCTL.OCX
��� ��?n%��UU/���%�����(���C������UKEYASCIITHISFORM	CMDCANCELCLICK$���
��C���
��C����UNODETHISFORMUPDATEOBJECTRefresh,��KeyPress3��	NodeCheck���14rA2r��23R��4)�pf1labelLabel12wstool.pf1.pgOptionslabellabelLabel2wstool.pf1.pgOptions13?PROCEDURE Refresh
*** ActiveX Control Method ***

ENDPROC
PROCEDURE KeyPress
*** ActiveX Control Event ***
LPARAMETERS keyascii
IF keyascii=27
	THISFORM.cmdCancel.Click()
ENDIF
ENDPROC
PROCEDURE NodeCheck
*** ActiveX Control Event ***
LPARAMETERS node
DODEFAULT(node)
THISFORM.UpdateObject()

ENDPROC
eTop = 208
Left = 168
Height = 96
Width = 216
TabIndex = 11
ZOrderSet = 7
Name = "oleControls"

wsbuilder4oleControls
olecontrol
_ws3utils.vcxolecontrols�AutoSize = .T.
FontBold = .F.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "Specify parameter source:"
Height = 15
Left = 144
Top = 104
Width = 129
TabIndex = 8
ZOrderSet = 4
Name = "Label3"

wsbuilder4Label3labellabel�� ���%Shb�U
��C����UTHISFORMRELEASEClick,��1�1#)�.PROCEDURE Click
THISFORM.Release()
ENDPROC
�Top = 360
Left = 340
Height = 23
Width = 60
FontName = "Tahoma"
FontSize = 8
Cancel = .T.
Caption = "Cancel"
TabIndex = 14
ZOrderSet = 3
Name = "cmdCancel"

wsbuilder4	cmdCancel
commandbutton
commandbutton�� ���g%m���U
��C����
��C����UTHISFORMSAVEPARM
UPDATEPARMInteractiveChange,��1��1G)�RPROCEDURE InteractiveChange
THISFORM.SaveParm()
THISFORM.UpdateParm()
ENDPROC
�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Height = 120
Left = 12
TabIndex = 5
Top = 120
Width = 120
ZOrderSet = 2
IntegralHeight = .T.
ItemTips = .T.
Name = "lstParms"

wsbuilder4lstParmslistboxlistbox`�� GGґ%��	��Uh���
��C������C��������������T���C���������
��C����ULOPARMTHISFORMSAVEPARMOCALLEECOLPARMSREMOVEADDRELEASEClick,��1r�q!qA�1�)G�Top = 360
Left = 276
Height = 23
Width = 60
FontName = "Tahoma"
FontSize = 8
Caption = "OK"
Default = .T.
TabIndex = 13
ZOrderSet = 1
Name = "cmdOK"

wsbuilder4cmdOK
commandbutton21
commandbutton�PROCEDURE Click
* Update List of parms
LOCAL loParm
THISFORM.SaveParm()
THISFORM.oCallee.colParms.Remove(-1)
FOR EACH loParm IN THISFORM.colParms
	THISFORM.oCallee.colParms.Add(loparm)
ENDFOR
THISFORM.Release()
ENDPROC

commandbutton�� ���%3�j�U�%�������B��T���������T����������T���������
��C����U	THISVALUETHISFORMTXTVALUEENABLEDOLECONTROLSOBJECTCBOPEMSUPDATEOBJECT
��C����UTHISINTERACTIVECHANGEInteractiveChange,��ProgrammaticChange��1AAA����2�1�	#
)�.PROCEDURE InteractiveChange
IF THIS.Value=0
	RETURN
ENDIF
THISFORM.txtValue.Enabled = (THIS.Value=1)
THISFORM.oleControls.Object.Enabled = (THIS.Value=2)
THISFORM.cboPEMS.Enabled = (THIS.Value=2)
THISFORM.Updateobject()
ENDPROC
PROCEDURE ProgrammaticChange
THIS.InteractiveChange()
ENDPROC

wsbuilder4optiongroup_ws3.h&����-CArial, 0, 9, 5, 15, 12, 32, 3, 0
Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
wsuddi_ws3.hPixelsClass14formwsuddiwsuddi
commandbutton
cmdWSDLLoctextbox�ButtonCount = 2
BackStyle = 0
Value = 1
ControlSource = ""
Height = 228
Left = 144
Top = 120
Width = 252
TabIndex = 9
ZOrderSet = 0
Name = "Optiongroup1"
Option1.FontName = "Tahoma"
Option1.FontSize = 8
Option1.Caption = "\<Value (expression):"
Option1.Value = 1
Option1.ControlSource = ""
Option1.Height = 15
Option1.Left = 6
Option1.Top = 14
Option1.Width = 111
Option1.AutoSize = .T.
Option1.Name = "Option1"
Option2.FontName = "Tahoma"
Option2.FontSize = 8
Option2.Caption = "\<Control/Property:"
Option2.ControlSource = ""
Option2.Height = 15
Option2.Left = 6
Option2.Top = 70
Option2.Width = 103
Option2.AutoSize = .T.
Option2.Name = "Option2"
Optiongroup1optiongroup�ocallee Reserved.
ccontrolpath Reserved.
nlastindex Reserved.
*setupws Reserved.
*updateobject Reserved.
*updateparm Reserved.
*saveparm Reserved.
�Height = 390
Width = 409
DoCreate = .T.
AutoCenter = .T.
BorderStyle = 2
Caption = "XML Web Service - Parameter Values"
HelpContextID = 1231132
nlastindex = 1
Name = "wsbuilder4"
form
_ws3utils.vcx_ws3.ho���-KMS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
Tahoma, 0, 8, 5, 13, 11, 21, 2, 0

wsbuilder2_ws3.hPixelsClassfArial, 0, 9, 5, 15, 12, 32, 3, 0
Tahoma, 0, 10, 6, 16, 13, 25, 3, 0
Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
wstestwstest
lblWebTestlabel_hyperlink.vcx_hyperlinklabelUPROCEDURE Click
THISFORM.SetupWS(THISFORM.cServiceID, THISFORM.cMethod)

ENDPROC
wstest
lblRefreshlabel_hyperlink.vcx13_ws3.h&����-<FontBold = .T.
FontName = "Tahoma"
FontSize = 8
FontUnderline = .F.
BackStyle = 0
Caption = "Web Test Page"
Enabled = .F.
Height = 15
Left = 256
MouseIcon = graphics\h_point.cur
Top = 294
Visible = .F.
Width = 86
ForeColor = 0,0,255
nvisitedforecolor = 16711680
lnewwindow = .T.
Name = "lblWebTest"
�� ��J�%Yzt�U��Ca����UTHISFORMUPDATEMETHODInteractiveChange,��1�17)�formFontBold = .T.
FontName = "Tahoma"
FontSize = 8
FontUnderline = .F.
BackStyle = 0
Caption = "Refresh"
Height = 15
Left = 12
MouseIcon = graphics\h_point.cur
Top = 294
Width = 46
ForeColor = 0,0,255
nvisitedforecolor = 16711680
Name = "lblRefresh"
_hyperlinklabel�� ��t%x���U#T�������
��C����UTHISFORMOCALLEEOCLIENTRELEASEClick,��11�1@)���� ��7%7NH�U��URefresh,��1B1<)�shapePROCEDURE InteractiveChange
LOCAL lcAlias
lcAlias = THISFORM.oAdapter.Tables.Item(THIS.ListIndex).Alias
IF USED(lcAlias)
	SELECT (lcAlias)
ELSE
	SELECT 0
	THISFORM.oAdapter.Tables.Item(THIS.ListIndex).ToCursor()
ENDIF

GO TOP
THISFORM.Grid1.RecordSource=lcAlias

ENDPROC
wstest
wsbasebuilder
wsbuilder2�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Height = 24
Left = 384
TabIndex = 12
Top = 315
Width = 120
ZOrderSet = 19
BorderColor = 0,128,192
ItemTips = .T.
Name = "cboBindProp"

wsbuilder2cboBindPropcomboboxcombobox
wsbuilder2cboBindcomboboxcombobox
wsbuilder2cboPEMScomboboxcombobox
wsbuilder2Label8labelform1�FontName = "Tahoma"
FontSize = 8
Height = 84
Left = 24
ReadOnly = .T.
Top = 108
Width = 372
EnableHyperlinks = .T.
Name = "edtDetails"

edtDetailseditboxeditboxwsuddi_hyperlinklabel1label_hyperlink.vcx_hyperlinklabelwsuddilblWSDL�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Height = 24
Left = 141
Style = 2
Top = 42
Visible = .F.
Width = 100
Name = "cboCursors"

cboCursorscomboboxcomboboxwstest31form�AutoSize = .T.
FontBold = .T.
FontName = "Tahoma"
FontSize = 8
FontUnderline = .F.
BackStyle = 0
Caption = "Results:"
Height = 15
Left = 12
Top = 48
Width = 47
Name = "lblResults"

lblResultslabellabel'Top = 0
Left = 12
Name = "colparms"
wstestcolparms
collection_ws3client.vcxcolparms<Top = 0
Left = 12
Height = 23
Width = 24
Name = "oWeb"
wstestoWebcustom
_ws3utils.vcx_webservices�FontName = "Tahoma"
FontSize = 10
Height = 216
Left = 12
ReadOnly = .T.
RowHeight = 19
Top = 72
Visible = .F.
Width = 432
Name = "Grid1"
wstestGrid1gridgridFontBold = .T.
FontName = "Tahoma"
FontSize = 8
FontUnderline = .F.
BackStyle = 0
Caption = "Data View"
Height = 15
Left = 172
MouseIcon = graphics\h_point.cur
Top = 294
Width = 58
ForeColor = 0,0,255
nvisitedforecolor = 16711680
Name = "lblBrowse"
wstest	lblBrowselabel_hyperlink.vcx_hyperlinklabel*Top = 0
Left = 12
Name = "_RESIZABLE1"
wstest_RESIZABLE1custom
_controls.vcx
_resizable�AutoSize = .T.
FontBold = .F.
FontName = "Tahoma"
FontSize = 8
FontUnderline = .F.
BackStyle = 0
Caption = "xxxxxxxxx"
Height = 15
Left = 76
Top = 24
Width = 56
Name = "lblMethod"
wstest	lblMethodlabellabelwstestlblWSlabellabelwstest
edtResultseditboxeditbox40wsphook_ws3.hPixelsClasswstestformprojecthookwsphook
�� �
�
��%1	L
Z�	�U4
��C������������T�������T�������T������T������T���	��
��T���	����T��
�����T���	����&%�C�
��C��
	���
	����T����������%�����-�T��
��-��T�����-���UTHIS
CHECKCADAPTEROCALLEE	WSHANDLERWSDLWSMLWSMETHODWSSYNTAX	CBOTABLESDISPLAYVALUEDSTABLE	CBOFIELDSDSFIELDCHKEXISTINGVALUEDSUSEEXISTINGCURSOR	CBOVALUESNODENAMELHASCURSORADAPTEROPTIONGROUP1ENABLEDOPTION2��������,%������C��	�
���O��G�B��T��C������������C���
��#T��C�����	�
�������������C���������%�����C��
	��O������(������K�"%�CC�
����fC�f��G�T�����
���T��a��!�����%�������
	����T��������������ULOTABLELOFIELD
LCOLDFIELDILFOUNDTHIS	CBOTABLES	LISTCOUNTTHISFORM	WSHANDLEROADAPTER	CBOFIELDSDISPLAYVALUECLEARTABLESITEM	LISTINDEXFIELDSADDITEMALIASCMDQUERYENABLEDLIST�)%�C�THIS.oCallee.oControlb�O��-�B��N%�C�
CursorAdapter�������CC����f��
CURSORFILL	����T���a���UTHISOCALLEEOCONTROL	BASECLASSCBOBINDPROPDISPLAYVALUELHASCURSORADAPTERX�������%�������2�B��f%�C�ODo you want to attach the schema from the selected table to your cursoradapter?�$�x�����B����I�
T�����#T��C���
��	�
����������T������
H�����C�C������E� T����(C��_�)���C�N��������.T����(C��_�,C��_�)���T����� ���%�C��,�>������!��%�C��
����T����,���T��������%�C��
��E�T����������C����������Q���ULOTABLELOFIELDLCFIELDLISTLCFIELDEXPRLCTYPETHIS	CBOTABLES	LISTCOUNTTHISFORM	WSHANDLEROADAPTERTABLESITEM	LISTINDEXFIELDSDATATYPE	MAXLENGTHFRACTIONDIGITSALIASOCALLEEOCONTROLCURSORSCHEMAPARENTREFRESH�����B�U	TOOBJECT2	TUSOURCE2
TLSKIPSEARCH2setupobjects,��updatefieldsT��
checkcadapter���attachschema���Init���1�BAAAAAb1ABAA3q�AAR�1!aA��!Q�AAAA�1A�A3�AA��A3qrAAbAA��1"����A��AA!AAaaA�B3�A1Mp�.��<5��
GW�
u)�
label�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Height = 23
Left = 108
TabIndex = 10
Top = 316
Width = 132
Name = "txtClient"

wsbuilder2	txtClient>Top = 120
Left = 12
Height = 17
Width = 20
Name = "oWeb"
	lblSampleC�� **�G%r���U/���%�����(���C������UKEYASCIITHISFORM	CMDCANCELCLICKA���
��C�������
��C����%�C�����U�T�������B��T����	��
T�����+�a���)%�C��
�����������������!��"%����C��fC�f	����!��"T����	� (#C�_�)��T�������T�������T��
��C����UNODE	LCCONTROL	LNCOUNTERTHISFORMUPDATEOBJECTTHISCCONTROLPATH	TXTCLIENTVALUETEXTACLIENTS	LEDITMODECCONTROLCBOBINDPROPDISPLAYVALUEGETPROPNAMESKeyPress,��	NodeCheck���1rA2r���"1AA���AA!AA!A1s1{�-)*G�� ..�%����UT��� T��C�
wsBuilder3�����T������
��C����
��C����U
LOCOMPLEXFORMTHISFORMCLASSLIBRARYOCALLEESETUPOBJECTSSHOWClick,��1q��2�).shapeShape1wsconfigoptiongroupoptiongroup�AutoSize = .T.
FontBold = .F.
FontName = "Tahoma"
FontSize = 8
FontUnderline = .F.
BackStyle = 0
Caption = "xxxxxxxxx"
Height = 15
Left = 92
Top = 8
Width = 56
Name = "lblWS"
}FontName = "Tahoma"
FontSize = 10
Height = 216
Left = 12
Top = 72
Width = 432
ControlSource = ""
Name = "edtResults"
�AutoSize = .T.
FontBold = .T.
FontName = "Tahoma"
FontSize = 8
FontUnderline = .F.
BackStyle = 0
Caption = "Operation:"
Height = 15
Left = 12
Top = 24
Width = 61
Name = "Label7"
Label7labellabel�AutoSize = .T.
FontBold = .T.
FontName = "Tahoma"
FontSize = 8
FontUnderline = .F.
BackStyle = 0
Caption = "Web Service:"
Height = 15
Left = 12
Top = 8
Width = 75
Name = "Label6"
wstestLabel6labellabelwstestlblWSDLlabel_hyperlink.vcx_hyperlinklabel+OLEObject = C:\WINNT\System32\shdocvw.dll
wstest
oleBrowser
olecontrol4EFontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "Go to Microsoft UDDI Web Site"
Height = 15
Left = 240
MouseIcon = graphics\h_point.cur
Top = 204
Width = 149
TabIndex = 10
ForeColor = 0,0,255
ctarget = http://uddi.microsoft.com/search/frames.aspx
nvisitedforecolor = 16711680
Name = "_hyperlinklabel1"
label_hyperlink.vcx�FontName = "Tahoma"
FontSize = 8
MaxLength = 254
ControlSource = ""
Height = 22
Left = 107
Style = 2
TabIndex = 6
Top = 87
Width = 312
Name = "cboWSDLFile"
FontBold = .T.
FontName = "Tahoma"
FontSize = 8
FontUnderline = .F.
BackStyle = 0
Caption = "View WSDL"
Height = 15
Left = 84
MouseIcon = graphics\h_point.cur
Top = 294
Width = 63
ForeColor = 0,0,255
nvisitedforecolor = 16711680
lnewwindow = .T.
Name = "lblWSDL"
GPROCEDURE Refresh
*** ActiveX Control Method ***
NODEFAULT
ENDPROC

olecontrolformtextboxtextboxwsregPROCEDURE Click
LOCAL loXML, i, lcAlias 

* Close any open tables
IF !EMPTY(ALIAS())
	USE
ENDIF

IF THISFORM.oleBrowser.Visible = .F.
	THISFORM.oleBrowser.Visible = .T.
	THISFORM.Grid1.Visible = .F.
	THISFORM.lblBrowse.Caption = DATAVIEW_LOC
	RETURN
ELSE
	THISFORM.oleBrowser.Visible = .F.
	THISFORM.Grid1.Visible = .T.
	THISFORM.lblBrowse.Caption = XMLVIEW_LOC
ENDIF

TRY
	SET SAFETY OFF
	IF THISFORM.ldataset
		THISFORM.oAdapter = CREATEOBJECT("xmladapter")
		loXML=THISFORM.ReturnValue
		THISFORM.oAdapter.MapN19_4ToCurrency = .T.
		THISFORM.oAdapter.Attach(loXml.Item(1), loXml.Item(0))
		THISFORM.cboCursors.Clear()
		FOR i = 1 TO THISFORM.oAdapter.Tables.Count
			lcAlias = THISFORM.oAdapter.Tables.Item(m.i).Alias
			IF USED(lcAlias)
				USE IN (lcAlias)
			ENDIF
			THISFORM.cboCursors.AddItem(lcAlias)
		ENDFOR
		THISFORM.lblResults.Caption=DOTNET_LOC
		THISFORM.cboCursors.ListIndex=1
		THISFORM.cboCursors.Visible=.T.
		THISFORM.cboCursors.InteractiveChange()
	ELSE
		XMLTOCURSOR(THISFORM.ReturnValue)
		THISFORM.Grid1.RecordSource=ALIAS()
	ENDIF
	THISFORM.Grid1.AutoFit()
CATCH
	MESSAGEBOX(NOCURSOR_LOC)
	THISFORM.oleBrowser.Visible = .T.
	THISFORM.Grid1.Visible = .F.
	THISFORM.lblBrowse.Caption = DATAVIEW_LOC
ENDTRY

ENDPROC
16PROCEDURE setupobjects
THIS.Checkcadapter()

WITH THIS.oCallee

	THIS.wshandler.Wsdl = .Wsdl
	THIS.wshandler.Wsml = .Wsml
	THIS.wsmethod = .wsMethod
	THIS.wsSyntax = .wsSyntax 
	THIS.cboTables.DisplayValue = .DSTable
	THIS.cboFields.DisplayValue = .DSField
	THIS.chkExisting.Value = .DSUseExistingCursor 
	THIS.cboValues.DisplayValue = .NodeName
	
	IF EMPTY(.DSTable) AND !EMPTY(.NodeName) AND !THIS.lHasCursorAdapter
		THIS.Optiongroup1.Value=2
	ENDIF
	
ENDWITH

IF THIS.lHasCursorAdapter
	THIS.chkExisting.Enabled=.F.
	THIS.Optiongroup1.Option2.Enabled=.F.
ENDIF

ENDPROC
PROCEDURE updatefields
LOCAL loTable, loField, lcOldField, i, lFound

IF THIS.cbotables.ListCount = 0 OR VARTYPE(THISFORM.wshandler.oAdapter)#"O"
	RETURN
ENDIF

lcOldField=ALLTRIM(THISFORM.cboFields.DisplayValue)

TRY
	THIS.cboFields.Clear()
	loTable = THISFORM.wshandler.oAdapter.Tables.Item(THIS.cbotables.ListIndex)
	FOR EACH loField IN loTable.Fields
		THIS.cboFields.AddItem(loField.Alias)
	ENDFOR

	* Special handling first time to save original field
	IF THIS.cmdquery.Enabled AND !EMPTY(lcOldField)
		FOR i = 1 TO THIS.cboFields.ListCount
			IF UPPER(THIS.cboFields.List(m.i))==UPPER(lcOldField)
				THIS.cboFields.ListIndex=m.i
				lFound=.T.
				EXIT
			ENDIF
		ENDFOR
	ENDIF
	IF THIS.cboFields.ListCount>0 AND !lFound
		THIS.cboFields.ListIndex=1
	ENDIF
CATCH
ENDTRY

ENDPROC
PROCEDURE checkcadapter
IF TYPE("THIS.oCallee.oControl")#"O"
	RETURN
ENDIF

IF ATC("CursorAdapter", THIS.oCallee.oControl.BaseClass)#0 AND;
  ALLTRIM(UPPER(THIS.oCallee.cboBindProp.DisplayValue))=="CURSORFILL"
	THIS.lHasCursorAdapter=.T.
ENDIF

ENDPROC
PROCEDURE attachschema
LOCAL loTable, loField, lcFieldList, lcFieldExpr, lcType 

IF THIS.cbotables.ListCount = 0
	RETURN
ENDIF

IF MESSAGEBOX(CONFIRM_ATTACHSCHEMA_LOC,36)#6
	RETURN
ENDIF

TRY
	lcFieldList=""
	loTable = THISFORM.wshandler.oAdapter.Tables.Item(THIS.cbotables.ListIndex)

	FOR EACH loField IN loTable.Fields
		
		lcType = loField.DataType
		DO CASE
		CASE ATC("C", loField.DataType)#0
			lcType= lcType +"(" + TRANSFORM(loField.MaxLength) +")"
		CASE ATC("N", loField.DataType)#0
			lcType= lcType +"(" + TRANSFORM(loField.MaxLength) +","+TRANSFORM(loField.FractionDigits)+")"
		ENDCASE

		lcFieldExpr = loField.Alias + " " + lcType
		
		* Limited to 255 chars for Property in Property Sheet
		IF LEN(lcFieldList + "," + lcFieldExpr)>255
			EXIT
		ENDIF
		IF !EMPTY(lcFieldList)
			lcFieldList = lcFieldList + ","
		ENDIF
		lcFieldList = lcFieldList + lcFieldExpr
	ENDFOR
	
	IF !EMPTY(lcFieldList)
		THIS.oCallee.oControl.CursorSchema = lcFieldList
		THIS.oCallee.oControl.Parent.Refresh()
	ENDIF	
CATCH

ENDTRY

ENDPROC
PROCEDURE Init
LPARAMETER toObject2, tuSource2, tlSkipSearch2
RETURN
ENDPROC
�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Height = 24
Left = 300
Style = 2
TabIndex = 8
Top = 284
Width = 204
ZOrderSet = 19
BorderColor = 0,128,192
ItemTips = .T.
Name = "cboBind"
�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Height = 24
Left = 300
Style = 2
TabIndex = 6
Top = 252
Width = 204
ZOrderSet = 19
BorderColor = 0,128,192
ItemTips = .T.
Name = "cboPEMS"
�AutoSize = .T.
FontBold = .F.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "Client \<description:"
Height = 15
Left = 12
Top = 320
Width = 88
TabIndex = 9
ZOrderSet = 20
Name = "Label8"
,OLEObject = C:\WINNT\System32\MSCOMCTL.OCX

wsbuilder2Label7�ldefaultmode Reserved.
curllocation Reserved.
curlpath Reserved.
cdefuri Reserved.
cdefpath Reserved.
*setup Reserved.
*getwslocation Reserved.
opgDefaultVDTTop = 72
Left = 12
Height = 216
Width = 432
Visible = .F.
Name = "oleBrowser"
0xmlfile Name of XML file used for testing.
ldataset Whether we have ADO .Net Dataset.
returnvalue Value returned by Web service.
cformref Reference to form.
oadapter Reference to XMLAdapater.
cserviceid ID of Web service.
cmethod Name of method to call.
*setupws Method to setup the Web service.
�DataSession = 2
Top = 8
Left = 32
Height = 315
Width = 456
DoCreate = .T.
ShowTips = .T.
Caption = "Web Service Test Results"
MinHeight = 200
MinWidth = 200
cformref = 
cserviceid = 
cmethod = 
Name = "wstest"
��ࡱ�>��	��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Root Entry���������ᄜ��OleObjectData�����AccessObjSiteData&������������\ChangedProps������������&����	��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Alj���j��(6(!C4S�	�<�j"=�	Y�ͫ\$89368265E-85FE-11d1-8BE3-0000F8754DA1�HideSelectionLIndentationN
(�X�.��a�R�������K�Q�C@
LabelEdit	I

LineStyle	I

MousePointer	I
PathSeparator
H.OLEDragMode	I
OLEDropMode	I
Appearance	I
CheckboxesLoperty. They DBTahoma added at both design and run time. At design time, you can use the Column Headers tab of the �ListView� Control Properties dialog box. At run time, use the �Add� method to add a �ColumnHeader� object to the �ColumnHead�� KK6C%���Ud��� T��C�
wsbuilder4�����T������
��C������C�����
��C����U
LOPARMFORMTHISCLASSLIBRARYOCALLEETHISFORMSETUPWSSHOWUPDATEPARMSClick,��1q��2�)K��� ��>�%�3#�U� ��C�Input values now����0��C� Programmatically set at run-time����"��C�Prompt at run-time����T������UTHISADDITEM	LISTINDEX
��C����UTHISFORMUPDATEPARMSInit,��InteractiveChange���1!3�2���)�wsconfiglabellabelcmdOK8PROCEDURE KeyPress
*** ActiveX Control Event ***
LPARAMETERS keyascii
IF keyascii=27
	THISFORM.cmdCancel.Click()
ENDIF
ENDPROC
PROCEDURE NodeCheck
*** ActiveX Control Event ***
LPARAMETERS node

DODEFAULT(node)

LOCAL lcControl, lnCounter
THISFORM.UpdateObject()

IF EMPTY(THIS.cControlPath)
	THISFORM.txtClient.Value = ""
	RETURN	
ENDIF

* Get new Client Name
lcControl = node.Text
lnCounter = 2
DO WHILE .T.
	IF ASCAN(THISFORM.aClients, lcControl,-1,-1,-1,7)=0
		EXIT
	ENDIF
	IF THISFORM.lEditmode AND UPPER(THISFORM.cControl)==UPPER(lcControl)
		EXIT
	ENDIF
	lcControl= node.Text + " (#" + TRANSFORM(lnCounter) + ")"
	lnCounter = lnCounter + 1
ENDDO
THISFORM.txtClient.Value = lcControl

* Get unique Property name
THISFORM.cboBindProp.DisplayValue =THISFORM.GetPropNames()
ENDPROC
gTop = 120
Left = 12
Height = 123
Width = 492
TabIndex = 4
lincludede = .T.
Name = "Olecontrols"
Olecontrols
olecontrol
_ws3utils.vcxolecontrolsAutoSize = .T.
FontBold = .F.
FontName = "Tahoma"
FontSize = 8
WordWrap = .T.
BackStyle = 0
Caption = "\<Bind control to the Web service return value or parameter:"
Height = 15
Left = 12
Top = 290
Width = 282
TabIndex = 7
ZOrderSet = 20
Name = "Label7"

wsbuilder2labellabel
wsbuilder2Label5labellabel
wsbuilder2Label1labellabel1labelFontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "View Service Description (WSDL)"
Height = 15
Left = 24
MouseIcon = graphics\h_point.cur
Top = 204
Width = 157
TabIndex = 10
ForeColor = 0,0,255
nvisitedforecolor = 16711680
Name = "lblWSDL"
_hyperlinklabel�Top = 240
Left = 12
Height = 22
Width = 60
FontName = "Tahoma"
FontSize = 8
Caption = "\<Search"
TabIndex = 11
Name = "cmdSearch"
wsuddi	cmdSearch
commandbutton
commandbutton�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Enabled = .F.
Height = 24
Left = 120
Style = 2
TabIndex = 8
Top = 75
Width = 276
BorderColor = 0,128,192
ItemTips = .T.
Name = "cboWS"
wsuddicboWScomboboxcomboboxwsuddiLabel6labellabel�AutoSize = .T.
FontBold = .F.
FontName = "Tahoma"
FontSize = 8
WordWrap = .T.
BackStyle = 0
Caption = "Name of binding \<property:"
Height = 15
Left = 252
Top = 320
Width = 126
TabIndex = 11
ZOrderSet = 20
Name = "Label5"

wsbuilder2Label4wstool.pf1.pgOptionstextboxform�� ��'E%<
eg�
�U�����%��������9�T�����-���%��������t�T����	����
�a�������������C����
����C���������T�������T���������
��C����ULOPARMITHISOLECONTROLSNODESCOUNTOPTIONGROUP1OPTION2ENABLEDITEMEXPANDEDOCALLEECOLPARMSADDLSTPARMSADDITEMPARMNAME	LISTINDEX	LBLSYNTAXCAPTIONWSSYNTAX
UPDATEPARM���������
�����T��������T�	��������C��
���%�C��������T��
��-��B����T��
��a���T�����
��%�C�.�	�����T��C�	C�.�	����"loObject = loObject.&lcObject.
�T��C�����b����C�(none)��
��������(������%�C�C�
����h
������CCC�
�����
������T��C��������%�C���
����T��
���������
H������C��VALUE����/�T��
���Value���C��CAPTION����h�T��
���Caption��$�C��RECORDSOURCE������T��
���Recordsource��2���T��
�������ULOOBJECTLCOBJECTLAPEMSILNPEMSLOPARMTHISCCONTROLPATHOLECONTROLS	LCOBJPATHCBOPEMSCLEARENABLED
OCONTAINERADDITEMCOLPARMSITEMLSTPARMS	LISTINDEX
INPUTPROPERTYVALUE������T�������T��C������T���	���
��T������T���
����%�C������T���
�����T�������%�C����
���� T����������-���T�������T���
����B��T��������T���
������������%�C��fC���f����T������T���a��
��C����%���
����T���a����C�������!����T���
����ULNINDEXLOPARMLONODETHISLSTPARMS	LISTINDEXCOLPARMSITEMLBLPARMTYPECAPTIONPARMTYPE
NLASTINDEXOPTIONGROUP1VALUEINPUTCONTROLTXTVALUE
INPUTVALUEOLECONTROLSCCONTROLPATHCCHECKEDKEYNODESCHECKEDFULLPATHSELECTED
ENSUREVISIBLE	NODECHECK�����T������T��C������%���������T���C��	����T��
����T���������T������T��
�����T�����
����ULNINDEXLOPARMTHIS
NLASTINDEXCOLPARMSITEMOPTIONGROUP1VALUE
INPUTVALUETXTVALUEINPUTCONTROL
INPUTPROPERTYCCONTROLPATHCBOPEMSDISPLAYVALUE�����B�U	TOOBJECT2	TUSOURCE2
TLSKIPSEARCH2setupws,��updateobject���
updateparm���saveparm���Init�	��1��AA��ASAaA2��3��e1QA�A2q�!A��q��AA�1a������A��1AA2�2�a1#a1aA11AAc1R����AAAAA12��r��1aA3�A17Q7r5JWT�qd�
�)�	AutoSize = .T.
FontBold = .F.
FontName = "Tahoma"
FontSize = 8
WordWrap = .T.
BackStyle = 0
Caption = "\<Control property used to assign the Web service results:"
Height = 15
Left = 12
Top = 258
Width = 272
TabIndex = 5
ZOrderSet = 20
Name = "Label1"
�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
WordWrap = .T.
BackStyle = 0
Caption = "At runtime, the binding property gets dynamically added to your control. When the value of this property is set to .T., the Web service is called and the results assigned to the specified control's property."
Height = 41
Left = 12
Top = 48
Width = 467
TabIndex = 2
ZOrderSet = 4
Name = "Label4"
label�Top = 352
Left = 12
Height = 15
Width = 102
FontName = "Tahoma"
FontSize = 8
AutoSize = .T.
BackStyle = 0
Caption = "\<Invoke at startup"
Value = .F.
ControlSource = ""
TabIndex = 13
ZOrderSet = 5
Name = "chkStartup"

wsbuilder2
chkStartupcheckboxcheckbox
wsbuilder2chkAlwaysCallWebServicecheckboxcheckbox
wsbuilder2Label2labellabel
wsbuilder2	cmdCancel
commandbutton
txtAppName�Top = 376
Left = 12
Height = 15
Width = 132
FontName = "Tahoma"
FontSize = 8
AutoSize = .T.
BackStyle = 0
Caption = "\<Always call Web service"
Value = .F.
ControlSource = ""
TabIndex = 14
ZOrderSet = 5
Name = "chkAlwaysCallWebService"
xAutoSize = .T.
FontName = "Tahoma"
FontSize = 8
WordWrap = .T.
BackStyle = 0
Caption = "Specify a client (control) to bind to your Web service operation. Select a property to assign the result of this operation. Include options such as ADO .Net Dataset table and field names."
Height = 28
Left = 12
Top = 12
Width = 458
TabIndex = 1
ZOrderSet = 4
Name = "Label2"
_ws3.h����-KMS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
	wsbuilder_ws3.hPixelsClass
wsbasebuilder	wsbuilderlblTypewsconfigKPROCEDURE Click
THISFORM.oCallee.oClient=""
THISFORM.Release()
ENDPROC

commandbutton
wsbuilder2
cmdComplex
��ࡱ�>��	������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Root Entry���������x��@OleObjectData�����AccessObjSiteData&������������8ChangedProps������������1������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������a�V�
4��k�O��L�,SL885.0 �MenuBarLAddressBarL-8747-5��Ws5��i+.bL�F�t TreeView Control, version 5.0 (SP2)	{0713E8A2-850A-101B-AFC0-4210102A8DA7} C:\WINDOWS\System32\comctl32._ws3.h�Top = 372
Left = 444
Height = 23
Width = 60
FontName = "Tahoma"
FontSize = 8
Cancel = .T.
Caption = "Cancel"
TabIndex = 17
ZOrderSet = 3
Name = "cmdCancel"
�� ���@%{���U#T�������
��C����UTHISFORMOCALLEE
OOPERATIONRELEASEClick,��11�1C)�RTop = 12
Left = 66
Height = 2
Width = 457
SpecialEffect = 0
Name = "Shape1"
�PROCEDURE Click
LOCAL loComplexForm
loComplexForm = NEWOBJECT("wsBuilder3", THISFORM.ClassLibrary)
loComplexForm.oCallee = THISFORM
loComplexForm.SetupObjects()
loComplexForm.SHOW()

ENDPROC
Pixels�AutoSize = .T.
Top = 372
Left = 203
Height = 23
Width = 101
FontName = "Tahoma"
FontSize = 8
Caption = "Comple\<x Types..."
TabIndex = 15
ZOrderSet = 3
Name = "cmdComplex"

commandbutton
commandbutton�Top = 372
Left = 380
Height = 23
Width = 60
FontName = "Tahoma"
FontSize = 8
Caption = "OK"
Default = .T.
TabIndex = 16
ZOrderSet = 2
Name = "cmdOK"

wsbuilder2cmdOK
commandbutton
commandbutton�AutoSize = .T.
FontBold = .F.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "\<Select control:"
Height = 15
Left = 12
Top = 99
Width = 71
TabIndex = 3
ZOrderSet = 20
Name = "Label3"

wsbuilder2Label3labellabel�ocallee Reserved.
naction Reserved.
ooperation Reserved.
dstable Reserved.
dsfield Reserved.
nodename Reserved.
leditmode Reserved.
ccontrol Reserved.
ccontrolpath Reserved.
ccontrolprop Reserved.
dsuseexistingcursor Reserved.
ocontrol Reserved.
*updateobject Reserved.
*setupobjects Reserved.
^aclients[1,0] Reserved.
*getpropnames Reserved.
^aclientprops[1,0] Reserved.
EHeight = 405
Width = 516
DoCreate = .T.
AutoCenter = .T.
BorderStyle = 2
Caption = "XML Web Service - Client Detail"
MinWidth = 400
WindowType = 1
HelpContextID = 1231133
naction = 0
dstable = 
dsfield = 
nodename = 
ccontrol = 
ccontrolpath = 
ccontrolprop = 
dsuseexistingcursor = .T.
Name = "wsbuilder2"

_ws3utils.vcx_ws3.ho���-
wsbuilder1_ws3.hPixelsClassLabel3oWebKMS Sans Serif, 0, 8, 5, 13, 11, 11, 2, 0
Tahoma, 0, 8, 5, 13, 11, 21, 2, 0

wsbasebuilder
wsbuilder1	wsbuilderlblWSDLlabel_hyperlink.vcx_hyperlinklabel.PROCEDURE Click
THISFORM.Release()
ENDPROC
	wsbuilder	cmdCancel
commandbutton
commandbuttonLabel1BPROCEDURE InteractiveChange
THISFORM.UpdateMethod(.T.)
ENDPROC
�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Enabled = .F.
Height = 24
Left = 12
Style = 2
TabIndex = 7
Top = 136
Width = 180
ZOrderSet = 19
BorderColor = 0,128,192
ItemTips = .T.
Name = "cboMethods"

wsbuilder1
cboMethodscomboboxcombobox�FontBold = .F.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "\<Name:"
Height = 15
Left = 12
Top = 55
Width = 65
TabIndex = 2
ZOrderSet = 20
Name = "Label3"

wsbuilder1labellabel�FontBold = .F.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "\<Description:"
Height = 15
Left = 12
Top = 84
Width = 59
TabIndex = 4
ZOrderSet = 20
Name = "Label4"

wsbuilder1Label4labellabel
wsbuilder1_webservices�Height = 37
Width = 36
coutputname = 
nbuildaction = 1
nbuildtry = 1
ccomplusapp = IIS Out-Of-Process Pooled Applications
Name = "wsphook"
�AutoSize = .T.
FontBold = .F.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "\<Select an operation (method):"
Height = 15
Left = 12
Top = 120
Width = 146
TabIndex = 6
ZOrderSet = 20
Name = "lblMethod"
	lblMethodlabellabel�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
Caption = "Options"
Height = 15
Left = 20
Top = 349
Width = 39
TabIndex = 12
ZOrderSet = 23
Style = 3
Name = "Label5"

wsbuilder1Label5labellabel�FontName = "Tahoma"
FontSize = 8
BorderStyle = 0
Height = 132
Left = 24
ReadOnly = .T.
ScrollBars = 0
TabIndex = 17
Top = 192
Width = 348
EnableHyperlinks = .T.
ControlSource = ""
Name = "edtDesc"

wsbuilder1edtDesceditbox�� ���%Shb�U
��C����UTHISFORMRELEASEClick,��1�1#)�wstool.pf1.pgOptionswsuddi
PROCEDURE setupws
LOCAL loParm, i

* Check for valid objects on form to bind to
IF THIS.olecontrols.Nodes.Count=0
	THIS.optiongroup1.option2.Enabled=.F.
ENDIF

* Ensure first node always expanded
IF THIS.olecontrols.Nodes.Count>0
	THIS.olecontrols.Nodes.Item(1).Expanded=.T.
ENDIF

* Update List of parms
FOR EACH loParm IN THIS.oCallee.colParms
	THIS.colParms.Add(loparm)
	THIS.lstParms.AddItem(loParm.ParmName)
ENDFOR

THIS.lstParms.ListIndex=1
THIS.lblsyntax.Caption=THIS.oCallee.WsSyntax
THIS.UpdateParm()

ENDPROC
PROCEDURE updateobject
LOCAL loObject, lcObject, laPEMs, i, lnPEMs, loParm 
DIMENSION laPEMs[1]

* This routine essentially updates the cboPEMs dropdown with
* properties of the selected object.

THIS.cControlpath = THIS.olecontrols.cControlPath
lcObjPath = THIS.olecontrols.cControlPath
THIS.cboPEMS.Clear()
IF EMPTY(THIS.olecontrols.cControlPath)
	THIS.cboPEMS.Enabled = .F.
	RETURN
ELSE
	THIS.cboPEMS.Enabled = .T.
ENDIF

loObject = THIS.olecontrols.oContainer
IF ATC(".", lcObjPath)#0	&& we have outer container
	lcObject = SUBSTRC(lcObjPath, ATC(".", lcObjPath)+1) && trim off outer name of parent
	loObject = loObject.&lcObject.
ENDIF

* Update the Bind Target combo
lnPEMs = AMEMBERS(laPEMs, loObject, 0)
THIS.cboPEMS.AddItem(WSNONE_LOC)
FOR i = 1 TO lnPEMs
	IF !PEMSTATUS(loObject, laPEMs[m.i],1)
		THIS.cboPEMS.AddItem(PROPER(laPEMs[m.i]))
	ENDIF
ENDFOR

* Set default values
loParm = THIS.colParms.Item(THIS.lstParms.ListIndex)
IF !EMPTY(loParm.InputProperty)
	THIS.cboPEMS.Value = loParm.InputProperty	
ELSE
	DO CASE
	CASE ASCAN(laPEMs,"VALUE")#0
		THIS.cboPEMS.Value = "Value"
	CASE ASCAN(laPEMs,"CAPTION")#0
		THIS.cboPEMS.Value = "Caption"
	CASE ASCAN(laPEMs,"RECORDSOURCE")#0
		THIS.cboPEMS.Value = "Recordsource"
	OTHERWISE
		THIS.cboPEMS.ListIndex = 1
	ENDCASE
ENDIF
ENDPROC
PROCEDURE updateparm
LOCAL lnIndex, loParm, loNode

lnIndex = THIS.lstParms.ListIndex
loParm = THIS.colParms.Item(lnIndex)
THIS.lblParmType.Caption = loParm.ParmType
THIS.nlastindex=lnIndex
THIS.Optiongroup1.Value=0

* Value parameter
IF EMPTY(loParm.InputControl)
	THIS.txtValue.Value=loParm.InputValue
	THIS.oleControls.cControlpath = ""
	IF !EMPTY(THIS.oleControls.cCheckedKey)
		THIS.oleControls.Nodes(THIS.oleControls.cCheckedKey).Checked=.F.
	ENDIF
	THIS.oleControls.cCheckedkey=""
	THIS.Optiongroup1.Value=1
	RETURN
ENDIF

* Need to locate this path 
THIS.oleControls.cControlpath = loParm.InputControl
THIS.txtValue.Value=""

FOR EACH loNode IN THIS.olecontrols.Nodes
	IF UPPER(loNode.FullPath)==UPPER(THIS.oleControls.cControlpath)
		loParm.InputValue=""
		loNode.Selected = .T.
		loNode.EnsureVisible()
		IF !loNode.Checked
			loNode.Checked=.T.
			THIS.oleControls.NodeCheck(loNode)
		ENDIF
		EXIT
	ENDIF
ENDFOR
THIS.optiongroup1.Value=2
ENDPROC
PROCEDURE saveparm
LOCAL lnIndex, loParm
lnIndex = THIS.nlastindex
loParm = THIS.colParms.Item(lnIndex)

IF THIS.Optiongroup1.Value=1
	loParm.InputValue=ALLTRIM(THIS.txtValue.Value)
	loParm.InputControl = ""
	loParm.InputProperty = ""
ELSE
	loParm.InputValue=""
	loParm.InputControl = THIS.cControlPath
	loParm.InputProperty = THIS.cboPEMS.DisplayValue
ENDIF

ENDPROC
PROCEDURE Init
LPARAMETER toObject2, tuSource2, tlSkipSearch2
RETURN
ENDPROC
editbox
wsbuilder1
chkOfflinecheckboxcheckbox
wsbuilder1ClassTop = 372
Left = 24
Height = 15
Width = 226
FontName = "Tahoma"
FontSize = 8
AutoSize = .T.
BackStyle = 0
Caption = "Allow \<Web service calls to be cached offline"
Value = .F.
ControlSource = ""
TabIndex = 13
ZOrderSet = 22
Name = "chkOffline"
*Top = 408
Left = 234
Name = "Colparms"
Colparms
collection_ws3client.vcxcolparms�� ���%Shb�U
��C����UTHISFORMRELEASEClick,��1�1#)�
lstClients
commandbutton
commandbuttonwsconfig
commandbutton
commandbutton	cmdCancelwsconfig�PROCEDURE Click
LOCAL loParmForm

loParmForm = NEWOBJECT("wsbuilder4", THIS.ClassLibrary)
loParmForm.oCallee = THISFORM
loParmForm.SetupWS()
loParmForm.Show(1)

THISFORM.UpdateParms()

ENDPROC

wsbuilder1cmdParms
commandbutton
commandbutton
wsbuilder1cboParmscomboboxcomboboxlblWSDL_ws3.h�i��-_custom_webservicescustom	_base.vcx�Top = 135
Left = 352
Height = 26
Width = 34
FontName = "Tahoma"
FontSize = 8
Caption = "Set"
Enabled = .F.
TabIndex = 10
ZOrderSet = 12
Name = "cmdParms"
�PROCEDURE Init
THIS.AddItem(PARMSETTYPE1_LOC)
THIS.AddItem(PARMSETTYPE2_LOC)
THIS.AddItem(PARMSETTYPE3_LOC)
THIS.ListIndex=1

ENDPROC
PROCEDURE InteractiveChange
THISFORM.UpdateParms()

ENDPROC

wsbuilder1label_hyperlink.vcx_hyperlinklabel
wsbuilder1edtOperationeditboxeditboxtextboxlabellabelLabel7wstool.pf1.pgOptions�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Enabled = .F.
Height = 24
Left = 216
Style = 2
TabIndex = 9
Top = 136
Width = 132
ZOrderSet = 11
BorderColor = 0,128,192
ItemTips = .T.
Name = "cboParms"

wsbuilder1txtOperation16form#DataSession = 2
Height = 174
Width = 514
Desktop = .T.
DoCreate = .T.
BufferMode = 0
AutoCenter = .T.
BorderStyle = 2
Caption = "Visual FoxPro XML Web Services Registration"
MaxButton = .F.
MinButton = .F.
WindowType = 1
WindowState = 0
HelpContextID = 1230988
Name = "wsreg"
1PROCEDURE regwebservice
* Add IntelliSense script
LOCAL lcWSDL, lSuccess, laWSErrs, lcErrMessage


lcWSDL = ALLTRIM(THISFORM.cboWSDL.Text)
IF EMPTY(lcWSDL)
	lcWSDL = ALLTRIM(THISFORM.cboWSDL.DisplayValue)
ENDIF

DO CASE
CASE EMPTY(lcWSDL)
	THISFORM.oWeb.Alert(NOWSDL_LOC)
	RETURN .F.
CASE ATC(" ",lcWSDL)#0
	THISFORM.oWeb.Alert(MB_URLWITHSPACE_LOC)
	RETURN .F.
OTHERWISE
	WAIT WINDOW WAIT_QUERYWS_LOC NOWAIT
	lSuccess = THISFORM.oWeb.AddFoxCode(lcWSDL,.T.)
	WAIT CLEAR
	IF !lSuccess
		lcErrMessage = NOGENFILE_LOC+INTELLISENSE_LOC
		DIMENSION laWSErrs[1]
		AERROR(laWSErrs)
		IF BETWEEN(laWSErrs[1],1400,1500)
			lcErrMessage = lcErrMessage + CRLF + CRLF +  laWSErrs[2]
		ENDIF
		THISFORM.oWeb.Alert(lcErrMessage) 
	ELSE
		MESSAGEBOX(FINISH2_LOC)
	ENDIF
	RETURN lSuccess
ENDCASE

ENDPROC
PROCEDURE Init
LOCAL lcDefURI

* Add existing default URI
IF THIS.oWeb.Getprefs("TIPS",@lcDefURI)
	IF !EMPTY(ALLTRIM(lcDefURI))
		THIS.cboWSDL.AddItem(ALLTRIM(lcDefURI))
	ENDIF
ENDIF

IF THIS.oWeb.lhaderror
	RETURN .F.
ENDIF

ENDPROC
@cnewwsdl Reserved.
cnewws Reserved.
*regwebservice Reserved.
shapeshapeShape1wsregRTop = 12
Left = 66
Height = 2
Width = 438
SpecialEffect = 0
Name = "Shape1"
labellabellblTypewsreglabellabelLabel6textbox
wsbuilder1lblParmlabellabel
wsbuilder1Label2shape/Height = 23
Width = 111
cerrormessage = 
ccomfile = 
casplistener = 
cwsdlfile = 
cwsalias = 
caspfile = 
cappname = 
cisense = 
cclass = 
cwsdllistener = 
cdeflocation = 
cproject = 
cserviceport = 
cwsname = 
curi1 = 
curi2 = 
curi3 = 
curi4 = 
cservice = 
Name = "_webservices"
��ࡱ�>��	��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Root Entry�����������DŽ���OleObjectData�����AccessObjSiteData&������������\ChangedProps������������&����	��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Alj���j��(6(!C4�2��<�j"=�		3�ͫ\$89368265E-85FE-11d1-8BE3-0000F8754DA1�HideSelectionLIndentationN
�4�X�.��a�R�������K�Q�C@
LabelEdit	I

LineStyle	I

MousePointer	I
PathSeparator
H.OLEDragMode	I
OLEDropMode	I
Appearance	I
CheckboxesLoperty. They DBTahoma added at both design and run time. At design time, you can use the Column Headers tab of the �ListView� Control Properties dialog box. At run time, use the �Add� method to add a �ColumnHeader� object to the �ColumnHeaPFontName = "Tahoma"
FontSize = 8
FontUnderline = .T.
BackStyle = 0
Caption = "View Service Description (WSDL)"
Height = 15
Left = 12
MousePointer = 15
MouseIcon = graphics\h_point.cur
Top = 442
Width = 157
TabIndex = 14
ForeColor = 0,0,255
ZOrderSet = 6
nvisitedforecolor = 16711680
lautotooltip = .T.
Name = "lblWSDL"
listboxcomboboxcombobox	cboVirDirwsconfig*FontName = "Tahoma"
FontSize = 8
FontUnderline = .T.
BackStyle = 0
Caption = "View Service Description (WSDL)"
Height = 15
Left = 12
MouseIcon = graphics\h_point.cur
Top = 408
Width = 157
TabIndex = 14
ForeColor = 0,0,255
ZOrderSet = 10
nvisitedforecolor = 16711680
Name = "lblWSDL"
�FontName = "Tahoma"
FontSize = 8
AddLineFeeds = .F.
Height = 34
Left = 84
ScrollBars = 2
TabIndex = 5
Top = 80
Width = 300
EnableHyperlinks = .T.
ControlSource = ""
Name = "edtOperation"
�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Height = 23
Left = 84
TabIndex = 3
Top = 52
Width = 300
Name = "txtOperation"
labellabel
wsbuilder1Label1label�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Height = 22
Left = 107
ReadOnly = .T.
TabIndex = 9
Top = 123
Width = 312
Name = "txtWSDLFile"
�Top = 144
Left = 432
Height = 23
Width = 72
FontName = "Tahoma"
FontSize = 8
Cancel = .T.
Caption = "\<Done"
TabIndex = 8
Name = "cmdCancel"
�PROCEDURE Click
LOCAL lcWSDL
lcWSDL = ALLTRIM(THISFORM.cboWSDL.DisplayValue)
IF !EMPTY(lcWSDL)
	THISFORM.oWeb.UpdatePrefs("Tips", lcWSDL)
ENDIF
THISFORM.RELEASE()

ENDPROC
�Top = 436
Left = 360
Height = 22
Width = 60
FontName = "Tahoma"
FontSize = 8
Cancel = .T.
Caption = "Cancel"
TabIndex = 3
ZOrderSet = 3
Name = "cmdCancel"
;PROCEDURE DblClick
THIS.Parent.cmdEdit2.Click()
ENDPROC
listboxlabelshapeShape4wstool.pf1.pgOptionsoptiongroup�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Height = 23
Left = 120
TabIndex = 5
Top = 86
Width = 384
Format = "K"
InputMask = (REPLICATE("X",254))
Name = "cboWSDL"
�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
Caption = "\<WSDL URL Location:"
Height = 15
Left = 12
Top = 89
Width = 99
TabIndex = 4
Name = "Label3"
wsreg�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
WordWrap = .T.
Caption = "Examples: http://www.myservers.com/soap/mycomservice.wsdl"
Height = 15
Left = 122
Top = 110
Width = 308
TabIndex = 9
Style = 3
Name = "lblSample"
labellabelLabel1wsreg
commandbutton
commandbutton	cmdSearchwsreglabellabelLabel4�� ���%0�%?�U�
H�
���C������l�F��C�:You must select a control to bind to your XML Web service.�x��B��CC���������M��C�AYou must specify a property name to bind to your XML Web service.�x��B��CC��������+��C�You must specify a client name.�x��B��@%�C������,C��������������������=%���
������
�C������	
����O��C�CYou must specify a different binding property name which is unique.�x��B�������
�����T��C������T�
������T�������T��C������T�������T�������T�������T������T������T������T��������}%�C�
CursorFill������
���	�7C�,THISFORM.oleControls.oContainer.BindControlsb�L	�
����	��Z����C��You have selected to have the CursorAdapter populated by the Web service at startup. It is recommended that you set the Form BindControls property to .F. so that the Web Service control can automatically invoke it updates the CursorAdapter.�x���T��
�����
��C����UTHISFORMOLECONTROLSCCONTROLPATHCBOBINDPROPDISPLAYVALUE	TXTCLIENTVALUEACLIENTPROPS	LEDITMODECCONTROLPROPOCALLEEOCLIENT
CLIENTNAME	OBJECTREF
BINDTARGETCBOPEMSBINDPROP
BINDSOURCECBOBINDLINVOKEATSTART
CHKSTARTUPLALWAYSCALLWEBSERVICECHKALWAYSCALLWEBSERVICEDSTABLEDSFIELDDSUSEEXISTINGCURSORNODENAME
OCONTAINERBINDCONTROLSNACTIONRELEASEClick,��1�QaAq�Aq�AA��AAA2aAAaAAAA��A2�2)�PROCEDURE Click
DO CASE
CASE EMPTY(THISFORM.OLEcontrols.cControlpath)
	MESSAGEBOX(MB_NOCONTROL_LOC)
	RETURN
CASE EMPTY(ALLTRIM(THISFORM.cboBindProp.DisplayValue))
	MESSAGEBOX(MB_PROPNAME_LOC)
	RETURN
CASE EMPTY(ALLTRIM(THISFORM.txtClient.Value))
	MESSAGEBOX(MB_CLIENTNAME_LOC)
	RETURN
ENDCASE

* Validate property name here
IF ASCAN(THISFORM.aClientprops, THISFORM.olecontrols.cControlPath+ "," + ALLTRIM(THISFORM.cboBindProp.DisplayValue), -1, -1, -1, 7)#0
	IF !THISFORM.lEditmode OR !THISFORM.olecontrols.cControlPath==THISFORM.cControlPath ;
	  OR !ALLTRIM(THISFORM.cboBindProp.DisplayValue)==THISFORM.cControlprop
		MESSAGEBOX(MB_UNIQUEPEM_LOC)
		RETURN	
	ENDIF
ENDIF

WITH THISFORM.oCallee.oClient
	.ClientName = ALLTRIM(THISFORM.txtClient.Value)
 	.ObjectRef = THISFORM.OLEcontrols.cControlpath
 	.BindTarget = THISFORM.cboPEMS.DisplayValue
	.BindProp = ALLTRIM(THISFORM.cboBindProp.DisplayValue)
	.BindSource = THISFORM.cboBind.DisplayValue
	.lInvokeAtStart = THISFORM.chkStartup.Value
	.lAlwaysCallWebService = THISFORM.chkAlwaysCallWebService.Value
	.DSTable = THISFORM.DSTable
	.DSField = THISFORM.DSField
	.DSUseExistingCursor = THISFORM.DSUseExistingCursor
	.NodeName = THISFORM.Nodename
ENDWITH

IF ATC("CursorFill", THISFORM.cboBindProp.DisplayValue)#0 AND THISFORM.chkStartup.Value AND;
	TYPE("THISFORM.oleControls.oContainer.BindControls")=="L" AND THISFORM.oleControls.oContainer.BindControls
	MESSAGEBOX(BINDCONTROLS_LOC)
ENDIF

THISFORM.oCallee.nAction = 1

THISFORM.Release()

ENDPROC
�� ��_%%l%���U�+�����������	�
�����
�������C�
����%�C�
�
�����T�
���-��B����T�
���a���T���
�
���%��
�
����%�C�
�
����O����T���
�
�������C����`��T��C������9�T���
�
����%�C�.�������T��C�C�.���������"loObject = loObject.&lcObject.
�(����T��a��T�	��������
%�����T�
�
�����T�
���-��
B��
�����C�
����T�
������T��C�����U�b�������(������A%�C�C�
�����h
�C�OBJECTC�
�����	������CCC�
�����
�������T��C�����b����C�(none)�
���������(����M�%�C�C�
����h
��I���CCC�
����
�������
H�^��� �C��
CursorFill��h����T�
������T�
���-����C�
CursorFill�
����T�
����
CursorFill��$�C��RECORDSOURCE�����T�
����Recordsource���C��VALUE����T�T�
����Value���C��CAPTION������T�
����Caption��2���T�
�������T�
�����ULAPARENTLCOBJECTLOOBJECTLAPEMSILNPEMS	LCOBJPATHLOERR	LHADERRORLCERRMSGTHISCBOPEMSCLEAROLECONTROLSCCONTROLPATHENABLEDLDATAENVODATAENV
OCONTAINERMESSAGECBOBINDPROPDISPLAYVALUEADDITEM	LISTINDEXOCONTROL�#�������������	�
���
�����
�����%��
��������Y��C�MThere are no objects to bind to. Please add an object to your form/container.�x��B�-���T���
������%�����U��
����������(����Q�.T�
���
���C�
��
������������	�
��������	����%�CC��
��
����"�
��C�
���������3T�
��C�
����������,��������T�
���
����T�
���
����T�
���
�������C�ReturnValue�
�� ��T�
��!����T���
��"�#�$�!��1T�
��CC���
��"�#�$�%�
������
�
��&�����C�
�'�
�� ����T�
�(��
��(��%��
������9�T�
�������)�a���T�
������%��
���Q����
��*��M�T�
�+�,����T�
��-����T��������
���R�%�C��.fC�f��N�T��/�a��T��0�a��
��C��1����C��
��2��T�
��3���4��T�
��5���6��T��a��!����%��
��M����C�The client control no longer appears to exist. It is likely that it or one of its parents was renamed. Please select a new control or cancel out of the builder and restore the original control.C�
 C�
 C�
 C�
 ��x���I�%�C�
�7��E�T�
�8�,��9��T�
�:�;����T�
�<�,��=��T�
�>�,��?��T�
��;��@��T�
�A��A��T�
�B��B��T�
�C��C��T�
�D��D��T�
�E����T�
�-����T�
�F����B������T�
��-��T�
��!����T�
�:�;��BindMe��
��C�
�7��UGLAPARENTLAOBJSILNOBJSLFOUNDLCOBJREFLONODE	LNCLIENTSLNITEMLOOPERATIONLOPARMLOOBJLOCLIENTTHISOLECONTROLSNODESCOUNTOCALLEE
OOPERATION
COLCLIENTSACLIENTSITEM
CLIENTNAME
COLOPERATIONSACLIENTPROPS	OBJECTREFBINDPROPWSDLWSML	LEDITMODENACTIONCBOBINDADDITEM	LISTINDEX
PFSETTINGS	PGMETHODS
LSTOPERATIONSLISTCOLPARMSPARMNAMEWSMETHODEXPANDEDOCLIENT	TXTCLIENTVALUECCONTROLPATHFULLPATHCHECKEDSELECTED
ENSUREVISIBLEISINDATAENVCCONTROLNAMETEXTCCHECKEDKEYKEYUPDATEOBJECTCBOPEMS
BINDTARGETCBOBINDPROPDISPLAYVALUE
CHKSTARTUPLINVOKEATSTARTCHKALWAYSCALLWEBSERVICELALWAYSCALLWEBSERVICE
BINDSOURCEDSTABLEDSFIELDDSUSEEXISTINGCURSORNODENAMECCONTROLCCONTROLPROP����$%���������	��;�B������%�CC�����
��f�B�������T���BindMe��
T�����+�a���8%�C��	����,�����������������!��T������T���BindMeC�_���	B����U
LCNAMELNCOUNTTHIS	LEDITMODEOLECONTROLSCCONTROLPATHCCONTROLPROPCBOBINDPROPDISPLAYVALUEACLIENTPROPS�����B�U	TOOBJECT2	TUSOURCE2
TLSKIPSEARCH2T������UTHISOCONTROLupdateobject,��setupobjects���getpropnames~��Init��DestroyE��1���QA�A22�1�A�1Ar��!��AA�1�A1�q�AA��q��AA�2��A������1A21q����qA�q�AAS!q!A1AAba��1�QaAb��A21AA�Q����Aaa�AAA���AAAAAAAAAA�1��3�B�A��A2���AA�A�2�A21�D�pX��m���������)��PROCEDURE updateobject
LOCAL laParent, lcObject, loObject, laPEMs, i, lnPEMs, lcObjPath, loErr, lHadError, lcErrMsg

* This routine essentially updates the cboPEMs dropdown with 
* properties of the selected object.

DIMENSION laParent[1]
DIMENSION laPEMs[1]

THIS.cboPEMS.Clear()
IF EMPTY(THIS.olecontrols.cControlPath)
	* User unchecked item
	THIS.cboPEMS.Enabled = .F.
	RETURN
ELSE
	THIS.cboPEMS.Enabled = .T.
ENDIF

lcObjPath = THIS.olecontrols.cControlPath

IF THIS.oleControls.lDataenv
	IF VARTYPE(THIS.oleControls.oDataenv)="O"
		loObject = THIS.oleControls.oDataenv
	ELSE
		ASELOBJ(laParent,2)
		loObject = laParent[1]
	ENDIF
ELSE
	loObject = THIS.oleControls.oContainer
ENDIF

IF ATC(".", lcObjPath)#0	&& we do not have outer container
	lcObject = SUBSTRC(lcObjPath, ATC(".", lcObjPath)+1)
	* Check if object exists
	TRY
		loObject = loObject.&lcObject.
	CATCH TO loErr
		lHadError=.T.
		lcErrMsg=loErr.Message
	ENDTRY
ENDIF

IF lHadError
	THIS.olecontrols.cControlPath=""
	THIS.cboPEMS.Enabled = .F.
	RETURN !lHadError
ENDIF

* Update the Bind Property combo
THIS.cboBindProp.Clear()
THIS.cboBindProp.DisplayValue = ""
lnPEMs = AMEMBERS(laPEMs, loObject, 1, "U")
FOR i = 1 TO lnPEMs
	IF !PEMSTATUS(loObject, laPEMs[m.i, 1], 1) AND ATC("OBJECT", laPEMs[m.i, 2])=0
		THIS.cboBindProp.AddItem(PROPER(laPEMs[m.i, 1]))
	ENDIF
ENDFOR

* Update the Bind Target combo
lnPEMs = AMEMBERS(laPEMs, loObject,0)
THIS.cboPEMS.AddItem(WSNONE_LOC)
FOR i = 1 TO lnPEMs
	IF !PEMSTATUS(loObject, laPEMs[m.i],1)
		THIS.cboPEMS.AddItem(PROPER(laPEMs[m.i]))
	ENDIF
ENDFOR

* Set default values
DO CASE
CASE PEMSTATUS(loObject, "CursorFill", 5)
	* Special case for CursorAdapter *
	THIS.cboPEMS.ListIndex=1
	THIS.cboPEMS.Enabled = .F.
	THIS.cboBindProp.AddItem("CursorFill")
	THIS.cboBindProp.DisplayValue = "CursorFill"
CASE ASCAN(laPEMs,"RECORDSOURCE")#0
	THIS.cboPEMS.DisplayValue = "Recordsource"
CASE ASCAN(laPEMs,"VALUE")#0
	THIS.cboPEMS.DisplayValue = "Value"
CASE ASCAN(laPEMs,"CAPTION")#0
	THIS.cboPEMS.DisplayValue = "Caption"
OTHERWISE
	THIS.cboPEMS.ListIndex = 1
ENDCASE

THIS.oControl = loObject
ENDPROC
PROCEDURE setupobjects
LOCAL laParent, laObjs, i, lnObjs, lFound, lcObjRef, loNode, lnClients
LOCAL lnItem, loOperation, loParm, loObj, loClient

DIMENSION laObjs[1]
DIMENSION laParent[1]

* Check for valid objects on form to bind to
IF THIS.olecontrols.Nodes.Count=0
	MESSAGEBOX(NOOBJECTS_LOC) 
	RETURN .F.
ENDIF

* Get list of current clients
lnClients=THIS.oCallee.oOperation.colClients.Count
IF lnClients>0
	DIMENSION THIS.aClients[lnClients]
	FOR i = 1 TO lnClients
		THIS.aClients[m.i] = THIS.oCallee.oOperation.colClients.Item(m.i).Clientname
	ENDFOR
ENDIF

* Get list of current binding properties
FOR EACH loOperation IN THIS.oCallee.colOperations
	FOR EACH loClient IN loOperation.colClients
		IF !EMPTY(THIS.aClientProps[1])
			DIMENSION THIS.aClientProps[ALEN(THIS.aClientProps,1)+1, 1]
		ENDIF
		THIS.aClientProps[ALEN(THIS.aClientProps,1), 1] = loClient.ObjectRef + "," + loClient.BindProp
	ENDFOR
ENDFOR

THIS.WSDL = THIS.oCallee.WSDL
THIS.WSML = THIS.oCallee.WSML

THIS.lEditmode = (THIS.ocallee.nAction = 2)

* Update the Bind Source combo with ReturnValue and operation parameters
THIS.cboBind.AddItem("ReturnValue")
THIS.cboBind.ListIndex=1
lnItem = THIS.ocallee.pfSettings.pgMethods.lstOperations.ListIndex
THIS.oOperation = THIS.ocallee.colOperations(THIS.ocallee.pfSettings.pgMethods.lstOperations.List(lnItem,2))
FOR EACH loParm IN THIS.oOperation.colParms
	THIS.cboBind.AddItem(loParm.Parmname)
ENDFOR

THIS.wsMethod = THIS.oOperation.wsMethod

* Ensure first node always expanded
IF THIS.olecontrols.Nodes.Count>0
	THIS.olecontrols.Nodes.Item(1).Expanded=.T.
ENDIF

THIS.ocallee.nAction = 0
 
* User clicked Edit button
IF THIS.lEditMode
	WITH THIS.oCallee.oClient	
		THIS.txtClient.Value=.Clientname
		THIS.olecontrols.cControlpath= .ObjectRef
		* Need to locate this path 
		lcObjRef = .ObjectRef
		FOR EACH loNode IN THIS.olecontrols.Nodes
			IF UPPER(loNode.FullPath)==UPPER(lcObjRef)
				loNode.Checked = .T.
				loNode.Selected = .T.
				loNode.EnsureVisible()
				THIS.oleControls.IsInDataEnv(loNode)
				THIS.olecontrols.cControlname = loNode.Text
				THIS.olecontrols.cCheckedkey = loNode.Key
				lFound=.T.
				EXIT
			ENDIF
		ENDFOR
		IF !lFound
			MESSAGEBOX(MISSINGCLIENT_LOC+CRLF+CRLF+lcObjRef)
		ELSE
			IF THIS.UpdateObject()
				THIS.cboPEMS.Value = .BindTarget
				THIS.cboBindProp.DisplayValue = .BindProp
				THIS.chkStartup.Value = .lInvokeAtStart
				THIS.chkAlwaysCallWebService.Value = .lAlwaysCallWebService
				THIS.cboBind.DisplayValue = .BindSource
				THIS.DStable = .DSTable
				THIS.DSField = .DSField
				THIS.DSUseExistingCursor = .DSUseExistingCursor
				THIS.Nodename = .Nodename
				
				* Save original settings to validate later
				THIS.cControl=.Clientname
				THIS.cControlPath=.ObjectRef
				THIS.cControlProp=.BindProp
				RETURN
			ENDIF
		ENDIF
	ENDWITH
ENDIF

THIS.lEditMode=.F.
THIS.cboBind.ListIndex=1
THIS.cboBindProp.DisplayValue = DEF_BINDPROP
THIS.UpdateObject()

ENDPROC
PROCEDURE getpropnames
LOCAL lcName, lnCount

IF THIS.lEditmode AND THIS.olecontrols.cControlPath==THIS.cControlPath
	RETURN THIS.cControlProp
ENDIF

IF !EMPTY(ALLTRIM(THIS.cboBindProp.DisplayValue))
	RETURN THIS.cboBindProp.DisplayValue
ENDIF

lcName=DEF_BINDPROP
lnCount=1
DO WHILE .T.
	IF ASCAN(THIS.aClientprops, THIS.olecontrols.cControlPath+ "," + lcName, -1, -1, -1, 7)=0
		EXIT
 	ENDIF
 	lnCount=lnCount+1
 	lcName = DEF_BINDPROP+TRANSFORM(lnCount)
ENDDO

RETURN lcName
ENDPROC
PROCEDURE Init
LPARAMETER toObject2, tuSource2, tlSkipSearch2
RETURN
ENDPROC
PROCEDURE Destroy
THIS.oControl = ""
ENDPROC
�AutoSize = .T.
FontBold = .F.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "Set \<parameter(s):"
Height = 15
Left = 216
Top = 120
Width = 88
TabIndex = 8
ZOrderSet = 7
Name = "lblParm"
�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
Caption = "Syntax"
Height = 15
Left = 20
Top = 172
Width = 36
TabIndex = 11
ZOrderSet = 6
Style = 3
Name = "Label2"
BAutoSize = .T.
FontName = "Tahoma"
FontSize = 8
WordWrap = .T.
BackStyle = 0
Caption = "Specify a friendly name and select your Web service operation. You can also supply additional information such as parameter settings."
Height = 28
Left = 12
Top = 12
Width = 347
TabIndex = 1
ZOrderSet = 4
Name = "Label1"
label�� ����%e}w�U��C������UTHISPARENTCMDEDIT2CLICKDblClick,��1110)�labeltextboxNPROCEDURE Click
THISFORM.oCallee.oOperation=""
THISFORM.Release()
ENDPROC
�Top = 408
Left = 324
Height = 22
Width = 60
FontName = "Tahoma"
FontSize = 8
Cancel = .T.
Caption = "Cancel"
TabIndex = 16
ZOrderSet = 3
Name = "cmdCancel"

wsbuilder1	cmdCancel
commandbutton
commandbutton��� ���M%^�m�U�������������T��C������(T��CC���C�
 C�
 �  ����T�	���
���T�����
��%��������T�������T������T����������C����������C�����������(��������9������
�����
InputValue��C�
������;������
�����InputControl��C�
������<������
�����
InputProperty��C�
����������T�������
��C����UITHISFORMOCALLEE
OOPERATIONWSOPERATIONTXTOPERATIONVALUEWSDESCEDTOPERATIONLOFFLINE
CHKOFFLINENPARMPROMPTCBOPARMS	LISTINDEXLWSFOUNDWSMETHOD
CBOMETHODSDISPLAYVALUE	WSPARMNUMCOLPARMSWSSYNTAXREMOVEGENPARMSCOUNTITEMADDPROPERTY
INPUTVALUEINPUTCONTROL
INPUTPROPERTYNACTIONRELEASEClick,��1q1b�AA2AA!�A����AB2�2h)��Top = 408
Left = 260
Height = 22
Width = 60
FontName = "Tahoma"
FontSize = 8
Caption = "OK"
Default = .T.
TabIndex = 15
ZOrderSet = 2
Name = "cmdOK"

wsbuilder1cmdOK
commandbutton
commandbuttonkTop = 180
Left = 12
Height = 156
Width = 372
BackStyle = 0
ZOrderSet = 1
Style = 3
Name = "Shape2"

wsbuilder1Shape2labelprojecthooksPROCEDURE Click
LOCAL i
WITH THISFORM.oCallee.oOperation

	.wsOperation = ALLTRIM(THISFORM.txtOperation.Value)
	.wsDesc = ALLTRIM(CHRTRAN(THISFORM.edtOperation.Value,CHR(13)+CHR(10) ,"  "))
	.lOffline = THISFORM.chkOffline.Value
	.nParmPrompt = THISFORM.cboparms.ListIndex	

	IF THISFORM.oCallee.lWSFound
		.wsMethod = THISFORM.cboMethods.DisplayValue
		.wsparmnum = THISFORM.wsparmnum
		.colParms.wssyntax = THISFORM.wssyntax
		.colParms.Remove(-1)
		.colParms.GenParms()
	ENDIF
	
	FOR i = 1 TO THISFORM.ColParms.Count
		.ColParms.Item(m.i).AddProperty("InputValue", THISFORM.colParms(m.i).InputValue)
		.ColParms.Item(m.i).AddProperty("InputControl", THISFORM.colParms(m.i).InputControl)
		.ColParms.Item(m.i).AddProperty("InputProperty", THISFORM.colParms(m.i).InputProperty)
	ENDFOR

ENDWITH

THISFORM.oCallee.nAction = 1
THISFORM.Release()

ENDPROC
shapeshapenTop = 356
Left = 12
Height = 40
Width = 372
SpecialEffect = 0
ZOrderSet = 0
Style = 3
Name = "Shape1"

wsbuilder1Shape1shapeshape�ocallee Reserved.
leditmode Reserved.
wsdocumentation Reserved.
naction Reserved.
*setupws Reserved.
^aoperations[1,0] Reserved.
�DataSession = 1
Height = 437
Width = 396
DoCreate = .T.
AutoCenter = .T.
BorderStyle = 2
Caption = "XML Web Service - Operation Detail"
MinWidth = 300
WindowType = 1
HelpContextID = 1231131
wsdocumentation = 
naction = 0
Name = "wsbuilder1"

_ws3utils.vcx�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Height = 120
Left = 22
TabIndex = 7
Top = 250
Width = 288
ZOrderSet = 13
ItemTips = .T.
Name = "lstClients"
wsbuilder.pfSettings.pgMethods�FontName = "Tahoma"
FontSize = 8
Caption = "\<Operations"
Height = 15
Left = 22
Top = 7
Width = 55
TabIndex = 1
ZOrderSet = 17
Style = 3
Name = "Label1"
wsbuilder.pfSettings.pgMethods�Top = 250
Left = 322
Height = 22
Width = 60
FontName = "Tahoma"
FontSize = 8
Caption = "A\<dd"
TabIndex = 8
ZOrderSet = 12
Name = "cmdAdd2"
wsbuilder.pfSettings.pgMethodscmdAdd2�� ���%Shb�U
��C����UTHISFORMRELEASEClick,��1�2%)�
commandbutton
commandbuttonwsbuilder.pfSettings.pgMethodsLabel3labellabelwsbuilder.pfSettings.pgMethodsLabel5labellabelwsbuilder.pfSettings.pgMethodsform�FontBold = .T.
FontName = "Tahoma"
FontSize = 8
FontCharSet = 0
Caption = "COM Server:"
Height = 17
Left = 12
Top = 60
Width = 468
TabIndex = 3
Name = "lblCOMFile"
shape
lstOperationslistboxlistboxcmdEdit�� ��7�%Stn�U
��C����UTHISFORMREFRESHInteractiveChange,��1�1/)�@FontName = "Tahoma"
FontSize = 8
WordWrap = .T.
BackStyle = 0
Caption = "Specify controls (Clients) that will consume your Operation above. You can include detail such as the property to bind to your Web service call."
Height = 41
Left = 22
Top = 214
Width = 360
TabIndex = 12
ZOrderSet = 11
Name = "Label3"
wsbuilder.pfSettings.pgMethods
commandbutton
commandbuttonwsbuilder.pfSettings.pgMethodscmdAdd�� ��Q%Vke�U
��C����UTHISFORM
GENERATEWSClick,��1�2()�optiongroup
commandbutton_ws3.h�^���-opgListenerucoutputname
nbuildaction
lrebuildall
lshowerrors
lbuildnewguids
nbuildtry
lhaderror
ccomplusapp
projectname
�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
WordWrap = .T.
Caption = "http://www.myservers.com/soap/mydotnetservice.asmx?wsdl"
Height = 15
Left = 174
Top = 122
Width = 299
TabIndex = 10
Style = 3
Name = "Label1"
�Top = 144
Left = 12
Height = 23
Width = 108
FontName = "Tahoma"
FontSize = 8
Caption = "\<UDDI Search..."
TabIndex = 6
Name = "cmdSearch"
4PROCEDURE Click
LOCAL loForm
THISFORM.cNewWSDL = ""
THISFORM.cNewWS = ""
loForm = NEWOBJECT("wsuddi",THISFORM.ClassLibrary)
loForm.oRef = THISFORM
loForm.Show(1)
IF !EMPTY(THISFORM.cNewWSDL)
	THISFORM.cboWSDL.Additem(THISFORM.cNewWSDL)
	THISFORM.cboWSDL.Value = THISFORM.cNewWSDL
ENDIF

ENDPROC
OFontName = "Tahoma"
FontSize = 8
WordWrap = .T.
BackStyle = 0
Caption = "Specify operations for your Web service. Operations are method calls for the Web service. You can also provide additional information such as parameters values."
Height = 41
Left = 22
Top = 22
Width = 360
TabIndex = 11
ZOrderSet = 10
Name = "Label5"

commandbuttonwsbuilder.pfSettings.pgMethodscmdDelcmdDel2wstool.pf1.pgOptionswsreg�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
Caption = "Enter either a valid WSDL URL location or search for an XML Web service using UDDI:"
Height = 15
Left = 12
Top = 56
Width = 410
TabIndex = 3
Name = "Label4"
wsregformLabel2ClassPixels_ws3.hwsregCArial, 0, 9, 5, 15, 12, 32, 3, 0
Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
_ws3.h&����-formTop = 6
Left = 15
Height = 416
Width = 494
Desktop = .T.
DoCreate = .T.
ShowTips = .T.
BorderStyle = 2
Caption = "Visual FoxPro XML Web Services Publisher"
MaxButton = .F.
MinButton = .F.
WindowType = 1
HelpContextID = 1230989
Name = "wstool"
Yowebparm Reserved.
*updatesets Reserved.
*checkpaths Reserved.
^auris[1,0] Reserved.
shapeshapeShape1wstoolRTop = 13
Left = 12
Height = 0
Width = 469
SpecialEffect = 0
Name = "Shape1"
labellabelLabel1wstool�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
Caption = "XML Web Service Advanced Options"
Height = 15
Left = 13
Top = 5
Width = 175
TabIndex = 1
Name = "Label1"

commandbutton
commandbuttoncmdDonewstool�Top = 384
Left = 410
Height = 23
Width = 72
FontName = "Tahoma"
FontSize = 8
Cancel = .T.
Caption = "Cancel"
TabIndex = 6
Name = "cmdDone"
.PROCEDURE Click
THISFORM.Release()
ENDPROC
�� ���%Shb�U
��C����UTHISFORMRELEASEClick,��1�2%)�
commandbutton
commandbuttoncmdGenwstool�Top = 384
Left = 334
Height = 23
Width = 72
FontName = "Tahoma"
FontSize = 8
Caption = "OK"
Default = .T.
TabIndex = 5
Name = "cmdGen"
tPROCEDURE Click
IF !THISFORM.CheckPaths() 
	RETURN
ENDIF	
THISFORM.UpdateSets()
THISFORM.Release()

ENDPROC
_webservices
_ws3utils.vcxcustomoWebwstoollabellabel��� ��Q�%|���U*%�C��
���B��
��C����UTHISFORM
GETWSLOCATIONRELEASEClick,��1!AA�2S)�label�PROCEDURE InteractiveChange
THISFORM.Updateclients()
THIS.Parent.Activate()
ENDPROC
PROCEDURE DblClick
THIS.Parent.cmdEdit.Click()

ENDPROC

commandbutton
commandbuttonwsbuilder.pfSettings.pgMethods
commandbuttonlabel_webservices
_ws3utils.vcxcustomoWebwsreglabellabel$�� �G%u���UA�����%��������Z�-��C�!Please select an operation first.�x��B��T��������T��C��������T��	�C���
��5T���C�	colClientC�Q�FFC\_ws3Client.vcx���F����
�� T��C�
wsBuilder2�����T������%�C��
��X�<��T��	����T�������m�
��C�����&%�C�����O��������B��T��C��]����C�����	������C���������&��C������������T��	����T��������C�����U	LODETFORMLNITEMLCIDTHISPARENT
LSTOPERATIONS	LISTINDEXLISTTHISFORM
OOPERATION
COLOPERATIONSOCLIENTOWEBCWSALIASCLASSLIBRARYOCALLEESETUPOBJECTSSHOWNACTION
COLCLIENTSADD
LSTCLIENTSADDLISTITEM
CLIENTNAME	NEWITEMIDACTIVATEClick,��1���AAb��Q!q��AbAA��a2�)d�� KK6C%����U 
��C������C�����UTHISFORM
UPDATECLIENTSTHISPARENTACTIVATE��C������UTHISPARENTCMDEDITCLICKInteractiveChange,��DblClick���1�212Ml�)K�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Height = 108
Left = 22
TabIndex = 2
Top = 70
Width = 288
ZOrderSet = 9
ItemTips = .T.
Name = "lstOperations"
�Top = 94
Left = 322
Height = 22
Width = 60
FontName = "Tahoma"
FontSize = 8
Caption = "\<Edit"
TabIndex = 4
ZOrderSet = 8
Name = "cmdEdit"

commandbuttonwsbuilder.pfSettings.pgMethods�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
Caption = "Register XML Web Service"
Height = 15
Left = 12
Top = 5
Width = 127
TabIndex = 1
Name = "lblType"
wsregNAutoSize = .T.
FontName = "Tahoma"
FontSize = 8
WordWrap = .T.
Caption = "Register an XML Web service from anywhere on the Internet for use in your applications. Once registered, you can access it from the Toolbox, TaskPane or by using IntelliSense."
Height = 28
Left = 12
Top = 24
Width = 458
TabIndex = 2
Name = "Label6"

commandbutton
commandbuttoncmdOKwsreg�Top = 144
Left = 358
Height = 23
Width = 72
FontName = "Tahoma"
FontSize = 8
Caption = "\<Register"
Default = .F.
TabIndex = 7
Name = "cmdOK"
4PROCEDURE Click
THISFORM.RegWebService()
ENDPROC
�� ���%Shb�U
��C����UTHISFORMREFRESHClick,��1�1#)�Label6
commandbutton
commandbutton	cmdCancelwsregcomboboxcomboboxcboWSDLwsreglabeltcerrormessage Error message.
ccomfile Name of COM file being published as web service.
casplistener ASP listener as URL.
cwsdlfile File name of FOXWS table.
lhaderror Whether an error has happened.
cwsalias Alias of FOXWS table.
lskipalerts Whether to skip alerts.
lgenasp Whether to generate an ASP file.
lgenwsdl Whether to generate WSDL files.
lgenintellisense Whether to generate IntelliSense records.
caspfile ASP file name.
cappname Application name used in ASP file.
cisense Name of type reference used for subscribed web service.
cclass Name of class.
cwsdllistener WSDL file as URL reference.
cdeflocation Name of default virdir location.
lprefsloaded Whether preferences are loaded for web service to be published.
cproject Name of project for published web service.
lusephook Whether to use project hook for web service project.
lchangephook Whether project hook option was changed.
cserviceport Service and port name for registered web service.
lunicode Whether to generate WSDL with Unicode (UTF-16) option.
lprefsexist Whether preferences exist already for selected web service to be published.
lusejscript Whether to use JScript for ASP listener.
luseisapi Whether to use ISAPI or ASP as web service listener.
luselongtname Whether to use long naming convention for filenames used for web service.
lusingwizard Whether the web service is used within the Wizard.
lisensefailed If IntelliSense failed.
cwsname Web service name.
curi1 WSDL Namespace URI
curi2 Schema Type Definition Namespace URI
curi3 Message Namespace URI
curi4 Base SOAP Action URI
cservice Name of service.
*genwsdl Generates WSDL and WSML files for web service being published.
*genasp Generates an ASP for web service to be published (VBScript or JScript). Default is to use ISAPI and not ASP.
*alert Displays alert messagebox.
*createvirdir Creates a virtual directory for web service.
^aints[1,0] Array of interfaces.
*addfoxcode Adds web service IntelliSense registration records.
*vartypetostring Returns data type (string) from numeric reference.
*checkwsdbf Checks and creates if necessary the FOXWS web service table.
^avirdirs[1,2] Array of virtual directories in IIS web server.
*getvirdirs Gets collection of Virtual Directories in your IIS web server.
*loopvirdirs Iterates through collection of virtual directories in IIS web server.
*updateprefs Updates the FOXWS web services table with a default setting.
*genws Main routine to generate all the components necessary for a web service being published.
*autows Creates automatic defaults for web service to be published.
*getprefs Gets value of a preference stored in FOXWS web service table.
*saveprefs Saves preferences for a published web service to FOXWS.
*loadprefs Loads saved preferences for a published web service.
*getproject Locates project for specified COM server used as published web service.
^aports[1,0] Array of ports (classes).
*getports Gets collection of ports (classes) in a WSDL file.
*getasp_vbs Creates ASP using VBScript.
*getasp_js Creates ASP using JScript.
^amethods[1,0] Array of methods.
*checkvdirmap Check for  Virtual Directory mappings for ISAPI.
�PROCEDURE Click
LOCAL loDetForm, lnItem, lcID

IF THIS.Parent.lstOperations.ListIndex = 0
	MESSAGEBOX(SELECTWS_LOC)
	RETURN
ENDIF

lnItem = THIS.Parent.lstOperations.ListIndex
lcID = THIS.Parent.lstOperations.List(lnItem,2)
THISFORM.oOperation = THISFORM.colOperations(lcID)
THISFORM.oClient = NEWOBJECT("colClient", HOME()+"FFC\_ws3Client.vcx")

SELECT (THISFORM.oWeb.cWSalias)
loDetForm = NEWOBJECT("wsBuilder2", THISFORM.ClassLibrary)
loDetForm.oCallee = THISFORM
IF !loDetForm.SetupObjects()
	RELEASE loDetForm
	THISFORM.oOperation=""
	THISFORM.oClient=""
ELSE
	loDetForm.SHOW()
ENDIF

IF VARTYPE(THISFORM.oClient)#"O" OR THISFORM.nAction=0
	RETURN
ENDIF

lcID = SYS(2015)
THISFORM.oOperation.colClients.Add(THISFORM.oClient, lcID)
THIS.Parent.lstClients.AddListItem(THISFORM.oClient.ClientName)
THIS.Parent.lstClients.AddListItem(lcID, THIS.Parent.lstClients.NewItemId, 2)

THISFORM.oOperation=""
THISFORM.oClient=""
THIS.Parent.Activate()

ENDPROC
=�� $$�R%����Ul���;T��C��"Select virtual directory location:��B�3��%�C��
��e�T��������ULCPATHTHISFORMTXTPATHVALUEClick,��1q�1A2�)$textboxtxtNewVirDirlabelwsbuilder.pfSettings.pgMethodswstool.pf1.pgURIswsproxy_ws3.h��� oo0�%�&��U�������T��������%%�����������R�B��F��	�
���T��C��������T�	�
�C��	����T���	�
���T�	����� T��C�
wsBuilder1�	����T����	��
��C����
��C����%�C�	�
���O��(�B��4%�CC�	�
��fCC��������f
����-T�����������C�	�
������%�������C�	�
�fC�f
	�C�{You have changed the Web Service operation which may impact the associated clients. Would you like to remove these clients?�$�x�	������C����	�
������C��������C������T�	�
����ULNITEMLCID	LODETFORMLCOLDMETHODTHISPARENT
LSTOPERATIONS	LISTINDEX	LISTCOUNTTHISFORMOWEBCWSALIASLIST
OOPERATION
COLOPERATIONSITEMWSMETHODNACTIONCLASSLIBRARYOCALLEESETUPWSSHOWWSOPERATION
LSTCLIENTS
COLCLIENTSREMOVECLEARACTIVATEClick,��11aQAA��1���AAD�A�q1A1k)ovPROCEDURE Click
LOCAL lnItem, lcID, loDetForm, lcOldMethod
lnItem = THIS.Parent.lstOperations.ListIndex
IF lnItem = 0 OR THIS.Parent.lstOperations.ListCount = 0
	RETURN
ENDIF

SELECT (THISFORM.oWeb.cWSalias)
lcID = THIS.Parent.lstOperations.List(lnItem,2)
THISFORM.oOperation = THISFORM.colOperations.Item(lcID)
lcOldMethod = THISFORM.oOperation.wsMethod
THISFORM.nAction = 2
loDetForm = NEWOBJECT("wsBuilder1", THISFORM.ClassLibrary)
loDetForm.oCallee = THISFORM
loDetForm.SetupWS()
loDetForm.SHOW()

IF VARTYPE(THISFORM.oOperation)#"O"
	RETURN
ENDIF

* Update name if necessary
IF !UPPER(ALLTRIM(THISFORM.oOperation.wsOperation)) == ;
	UPPER(THIS.Parent.lstOperations.List(THIS.Parent.lstOperations.ListIndex))
	THIS.Parent.lstOperations.List(THIS.Parent.lstOperations.ListIndex)=ALLTRIM(THISFORM.oOperation.wsOperation)
ENDIF

IF THIS.Parent.lstClients.ListCount>0 AND !UPPER(THISFORM.oOperation.wsMethod)==UPPER(lcOldMethod) AND MESSAGEBOX(REMOVECLIENTS_LOC,36)=6
	THISFORM.oOperation.colClients.Remove(-1)
	THIS.Parent.lstClients.Clear()
	THIS.Parent.Activate()
ENDIF

THISFORM.oOperation = ""
ENDPROC
��� ��\%B�U����%���
�������CوThe selected web service does not appear to be registered on this machine. Click on the Refresh button on the first page to register it.�x��B��F������8T���C�colOperationC�Q�FFC\_ws3Client.vcx��� T��C�
wsBuilder1�����T������
��C��	��
��C��
��&%�C�����O������t�B��T��C��]����C������
����C���������&��C������������T��������C�����U	LODETFORMLCIDTHISFORMLWSFOUNDOWEBCWSALIAS
OOPERATIONCLASSLIBRARYOCALLEESETUPWSSHOWNACTION
COLOPERATIONSADDTHISPARENT
LSTOPERATIONSADDLISTITEMWSOPERATION	NEWITEMIDACTIVATEClick,��1�A	AA���bAA��a1�)��Top = 70
Left = 322
Height = 22
Width = 60
FontName = "Tahoma"
FontSize = 8
Caption = "\<Add"
TabIndex = 3
ZOrderSet = 7
Name = "cmdAdd"
�Top = 118
Left = 322
Height = 22
Width = 60
FontName = "Tahoma"
FontSize = 8
Caption = "\<Remove"
TabIndex = 5
ZOrderSet = 6
Name = "cmdDel"
formSTop = 159
Left = 11
Height = 2
Width = 446
SpecialEffect = 0
Name = "Shape4"
.PROCEDURE Click
THISFORM.Refresh()
ENDPROC
�Top = 298
Left = 322
Height = 22
Width = 60
FontName = "Tahoma"
FontSize = 8
Caption = "Re\<move"
TabIndex = 10
ZOrderSet = 16
Name = "cmdDel2"
cmdEdit2_ws3.h�H0�-	wsmanager	wsmanager
chkToolbox�� ���%Shb�U
��C����UTHISFORMREFRESHClick,��1�1#)�wstool.pf1.pgOptions�FontName = "Tahoma"
FontSize = 8
Caption = "\<Clients"
Height = 15
Left = 22
Top = 195
Width = 34
TabIndex = 6
ZOrderSet = 15
Style = 3
Name = "Label2"

commandbutton
commandbuttonjTop = 14
Left = 10
Height = 176
Width = 384
BackStyle = 0
ZOrderSet = 1
Style = 3
Name = "Shape1"
CArial, 0, 9, 5, 15, 12, 32, 3, 0
Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
�PROCEDURE Click
LOCAL loDetForm, lcID
IF !THISFORM.lwsFound
	MESSAGEBOX(REFRESHWS_LOC)
	RETURN
ENDIF

SELECT (THISFORM.oWeb.cWSalias)
THISFORM.oOperation = NEWOBJECT("colOperation", HOME()+"FFC\_ws3Client.vcx")
loDetForm = NEWOBJECT("wsBuilder1", THISFORM.ClassLibrary)
loDetForm.oCallee = THISFORM
loDetForm.SetupWS()
loDetForm.SHOW()

IF VARTYPE(THISFORM.oOperation)#"O" OR THISFORM.nAction=0
	RETURN
ENDIF

lcID = SYS(2015)
THISFORM.colOperations.Add(THISFORM.oOperation, lcID)
THIS.Parent.lstOperations.AddListItem(THISFORM.oOperation.wsOperation)
THIS.Parent.lstOperations.AddListItem(lcID, THIS.Parent.lstOperations.NewItemId, 2)
THISFORM.oOperation=""
THIS.Parent.Activate()
ENDPROC
��� ll�%�#��U3����T��������%%�����������J�B��@%�C�)Do you want to delete selected Operation?�$�x�����B��T��C����������C���������C��	�
���%���������T��������
��C�	������C���
��ULNITEMLCIDTHISPARENT
LSTOPERATIONS	LISTINDEX	LISTCOUNTLIST
REMOVEITEMTHISFORM
COLOPERATIONSREMOVE
UPDATECLIENTSACTIVATEClick,��1�aQAAAA�qA�a�A1�)l�PROCEDURE Click
LOCAL lnItem, lcID
lnItem = THIS.Parent.lstOperations.ListIndex
IF lnItem=0 OR THIS.Parent.lstOperations.ListCount = 0
	RETURN
ENDIF
IF MESSAGEBOX(DELETEOPERATION_LOC, 36)=7
	RETURN
ENDIF
lcID = THIS.Parent.lstOperations.List(lnItem,2)
THIS.Parent.lstOperations.RemoveItem(lnItem)
THISFORM.colOperations.Remove(lcID)

IF THIS.Parent.lstOperations.ListCount > 0
	THIS.Parent.lstOperations.ListIndex=1
	THISFORM.Updateclients()
ENDIF
THIS.Parent.Activate()
ENDPROC
��� yy\�%0�U.�����T��������%%�����������N�B��=%�C�&Do you want to delete selected client?�$�x�����B��T��C����������C�����	��T�����
���%T��CC�����
�������C���
�����C�����ULNITEMLCIDLOOPERATIONTHISPARENT
LSTCLIENTS	LISTINDEX	LISTCOUNTLIST
REMOVEITEM
LSTOPERATIONSTHISFORM
COLOPERATIONS
COLCLIENTSREMOVEACTIVATEClick,��1�aQAA�AA�qbQA1�)y�Top = 274
Left = 322
Height = 22
Width = 60
FontName = "Tahoma"
FontSize = 8
Caption = "Ed\<it"
TabIndex = 9
ZOrderSet = 14
Name = "cmdEdit2"
wsbuilder.pfSettings.pgMethodsShape1shapeshapekTop = 202
Left = 10
Height = 180
Width = 384
BackStyle = 0
ZOrderSet = 0
Style = 3
Name = "Shape2"
wsbuilder.pfSettings.pgMethodsShape2oWebCArial, 0, 9, 5, 15, 12, 32, 3, 0
Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
Pixels�� ���%Shb�U
��C����UTHISFORMRELEASEClick,��1�1#)�shapeshapewsbuilder.pfSettings.pgServicesLabel2labellabelwsbuilder.pfSettings.pgServicesedtDesceditboxlabel�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "Description:"
Height = 15
Left = 11
Top = 154
Width = 59
TabIndex = 4
ZOrderSet = 10
Name = "Label2"
editbox
lblServiceDocform�Top = 192
Left = 12
Height = 15
Width = 96
FontName = "Tahoma"
FontSize = 8
AutoSize = .T.
Alignment = 0
Caption = "Show in \<Toolbox"
Value = .T.
ControlSource = ""
TabIndex = 4
Name = "chkToolbox"
optiongroupoptiongroup	opgScriptwstool.pf1.pgOptionslabelform�PROCEDURE Click
LOCAL lnItem, lcID, loOperation 
lnItem = THIS.Parent.lstClients.ListIndex
IF lnItem=0 OR THIS.Parent.lstClients.ListCount = 0
	RETURN
ENDIF
IF MESSAGEBOX(DELETECLIENT_LOC ,36)=7
	RETURN
ENDIF
lcID = THIS.Parent.lstClients.List(lnItem,2)
THIS.Parent.lstClients.RemoveItem(lnItem)

lnItem = THIS.Parent.lstOperations.ListIndex
loOperation = THISFORM.colOperations(THIS.Parent.lstOperations.List(lnItem,2))
loOperation.colClients.Remove(lcID)

THIS.Parent.Activate()
ENDPROC
�FontName = "Tahoma"
FontSize = 8
Height = 108
Left = 23
ReadOnly = .T.
ScrollBars = 0
Top = 264
Width = 360
EnableHyperlinks = .T.
ControlSource = ""
Name = "edtDesc"
�FontName = "Tahoma"
FontSize = 8
WordWrap = .T.
BackStyle = 0
Caption = ""
Height = 34
Left = 11
Top = 170
Width = 384
TabIndex = 5
ZOrderSet = 9
Name = "lblServiceDoc"
wsbuilder.pfSettings.pgServiceslabellabel?PROCEDURE InteractiveChange
THISFORM.UpdateMethod()
ENDPROC
wsbuilder.pfSettings.pgServices
cboMethodscomboboxcomboboxtextbox�� '%����U>%�����*���C�URI�*������
��C����UTHISFORMLDEFAULTMODEOWEBUPDATEPREFSRELEASEClick,��1�A�2�)�Top = 208
Left = 380
Height = 23
Width = 72
FontName = "Tahoma"
FontSize = 8
Caption = "\<Select"
Default = .T.
TabIndex = 12
Name = "cmdOK"
wsconfiglabellabelLabel8�� ����%Xys�U
��C����UTHISFORMUPDATEMETHODInteractiveChange,��1�14)��FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Height = 24
Left = 23
Style = 2
TabIndex = 7
Top = 228
Width = 360
ZOrderSet = 19
BorderColor = 0,128,192
ItemTips = .T.
Name = "cboMethods"
wsbuilder.pfSettings.pgServices	lblMethodlabellabellblMoreoWebClasscustom�� ����%t���U��C��������UTHISFORMSETUPWS
CSERVICEIDCMETHODClick,��1�2J)�^PROCEDURE Click
IF !THISFORM.GetWSLocation()
	RETURN
ENDIF
THISFORM.Release()

ENDPROC
:PROCEDURE InteractiveChange
THISFORM.Refresh()
ENDPROC
PROCEDURE InteractiveChange
LOCAL lcID
IF THISFORM.lstServices.ListCount=0
	RETURN
ENDIF
lcID = ALLTRIM(THISFORM.lstServices.List(THISFORM.lstServices.ListIndex, 2))
LOCATE FOR UniqueID = lcID AND !DELETED()
IF FOUND()
	REPLACE Toolbox WITH THIS.Value
ENDIF

ENDPROC
checkboxcheckbox	wsmanagercmdEdit
commandbuttoncmdGenwspub�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "\<Listener URI:"
Height = 15
Left = 11
Top = 91
Width = 65
TabIndex = 4
Name = "Label11"
��� ��c %	:$�U����%�������"�B��"T��CC����������-����C'
	��%�C4��y�>����	���U
LCIDTHISFORMLSTSERVICES	LISTCOUNTLIST	LISTINDEXUNIQUEIDTOOLBOXTHISVALUEInteractiveChange,��1qqAA!Q�A2)�X�� ??��%����Ud���%�������"�B��"T��CC����������	�����C'
	����ULCIDTHISFORMLSTSERVICES	LISTCOUNTLIST	LISTINDEXUNIQUEIDClick,��1qqAA!�1�)?�PROCEDURE Click
LOCAL lcID 
IF THISFORM.lstServices.ListCount=0
	RETURN
ENDIF
lcID = ALLTRIM(THISFORM.lstServices.List(THISFORM.lstServices.ListIndex, 2))
BROWSE LAST NORMAL NODELETE NOAPPEND FOR UniqueID=lcID AND !DELETED()
ENDPROC
�Top = 216
Left = 136
Height = 22
Width = 60
FontName = "Tahoma"
FontSize = 8
Caption = "\<View"
TabIndex = 10
ZOrderSet = 8
Name = "cmdEdit"

commandbutton
commandbutton	wsmanagerCommandbutton1form3PROCEDURE Click
THISFORM.GenerateWS()

ENDPROC
textboxformlabel�� ���e%Ynh�U
��C����UTHISFORM
REGWEBSERVICEClick,��1�1))�label�FontBold = .F.
FontName = "Tahoma"
FontSize = 8
Caption = "View \<operations"
Height = 15
Left = 23
Top = 208
Width = 78
TabIndex = 6
ZOrderSet = 20
Style = 3
Name = "lblMethod"
�FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "Select an \<XML Web service:"
Height = 15
Left = 11
Top = 41
Width = 153
TabIndex = 2
ZOrderSet = 4
Name = "lblMore"
wsbuilder.pfSettings.pgServiceslabelwsbuilder.pfSettings.pgServicesLabel1form
commandbuttonwstool.pf1.pgOptionscombobox0PROCEDURE Click
THISFORM.Release()

ENDPROC
�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
FontUnderline = .F.
BackStyle = 0
Caption = "\<XML Web Services:"
Height = 15
Left = 24
Top = 81
Width = 93
TabIndex = 7
Name = "Label6"
�AutoSize = .F.
FontBold = .F.
FontName = "Tahoma"
FontSize = 8
FontUnderline = .F.
BackStyle = 0
Caption = ""
Height = 15
Left = 84
Top = 136
Width = 312
TabIndex = 5
Name = "lblBizname"

lblBiznamelabellabelwsuddi	cmdCancelwsuddi�PROCEDURE Error
LPARAMETERS nError, cMethod, nLine
THIS.lhaderror=.T.

ENDPROC
PROCEDURE AfterBuild
LPARAMETERS nError

* Skip for non COM components
IF THIS.nBuildAction < 3
	RETURN
ENDIF

LOCAL loWS, lnSaveArea
IF nError#0
	* Let VFP display error
	* MESSAGEBOX(PHERROR_MISCERROR_LOC+MESSAGE())
	RETURN
ENDIF

****** Recreate the Web Service components ******
loWS = NEWOBJECT("_webservices",THIS.ClassLibrary)
IF VARTYPE(loWS)#"O"
	RETURN
ENDIF

lcVFPWSDBF = ADDBS(JUSTPATH(_FOXCODE)) + FOXWSDBF
IF !FILE(lcVFPWSDBF)
	RETURN
ENDIF
lnSaveArea = SELECT()
SELECT 0
USE (lcVFPWSDBF) SHARED AGAIN
IF EMPTY(ALIAS())
	SELECT (lnSaveArea)
	RETURN .F.
ENDIF

SCAN FOR !DELETED() AND UsePHook AND UPPER(TYPE)="P";
  AND UPPER(ALLTRIM(COMFile))==UPPER(THIS.cOutputName)

	IF loWS.Autows(ALLTRIM(COMFile),ALLTRIM(Class))
		loWS.GenWS()
	ENDIF

ENDSCAN

USE
loWS = null
SELECT (lnSaveArea)
WAIT WINDOW PHBUILDOK_LOC TIMEOUT 2

ENDPROC
PROCEDURE BeforeBuild
LPARAMETERS cOutputName, nBuildAction, lRebuildAll, lShowErrors, lBuildNewGuids

* Skip for non COM components
IF nBuildAction < 3
	RETURN
ENDIF

THIS.nBuildAction = nBuildAction
THIS.cOutputName = cOutputName

* Let's try to shutdown IIS app that caches web service components.
LOCAL lcApp
LOCAL loCat AS "COMAdmin.COMAdminCatalog"
loCat = CreateObject("COMAdmin.COMAdminCatalog")
loCat.Connect("")
IF VARTYPE(THIS.cCOMPlusApp)="C" AND !EMPTY(THIS.cCOMPlusApp)
	lcApp = ALLTRIM(THIS.cCOMPlusApp)
ELSE
	lcApp = "IIS Out-Of-Process Pooled Applications"
ENDIF
loCat.ShutdownApplication(lcApp)
loCat.StartApplication(lcApp)

ENDPROC
PROCEDURE Init
THIS.ProjectName = _VFP.ActiveProject.Name

ENDPROC
:FontName = "Tahoma"
FontSize = 8
WordWrap = .T.
BackStyle = 0
Caption = "Select an XML Web service for use with your application. You can also specify operations, which are like method calls on the selected service."
Height = 28
Left = 11
Top = 8
Width = 384
TabIndex = 1
ZOrderSet = 4
Name = "Label1"
labellabel�FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "Refresh"
Height = 15
Left = 167
MousePointer = 15
Top = 41
Width = 40
TabIndex = 13
ForeColor = 0,0,255
ZOrderSet = 3
nvisitedforecolor = 16711680
Name = "lblRefresh"
wsbuilder.pfSettings.pgServices
lblRefreshlabel_hyperlink.vcx_hyperlinklabelwsbuilder.pfSettings.pgServiceslblNewWSlabel_hyperlink.vcx_hyperlinklabellstServices�FontName = "Tahoma"
FontSize = 8
Value = http://tempuri.org/Proj1/wsdl/
ControlSource = ""
Height = 22
InputMask = (REPLICATE("X",254))
Left = 35
TabIndex = 3
Top = 65
Width = 408
Name = "txtWSDLURI"
wsproxycustom�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
Caption = "File \<Output Path:"
Height = 15
Left = 24
Top = 136
Width = 84
TabIndex = 6
Name = "lblPath"

txtWSDLURI	pageframelabel�AutoSize = .F.
FontName = "Tahoma"
FontSize = 8
WordWrap = .T.
BackStyle = 0
Caption = 'The SOAP Toolkit supports most simple data types except currency. Note that Date types will map to Datetime. Complex types which are not supported appear as "?????" in the WSDL and need to be manually edited.'
Height = 132
Left = 299
Top = 51
Width = 151
TabIndex = 23
Name = "Label1"
�AutoSize = .T.
ButtonCount = 2
BackStyle = 0
BorderStyle = 0
Value = 1
ControlSource = ""
Height = 27
Left = 323
Top = 191
Width = 128
TabIndex = 20
Name = "opgScript"
Option1.FontName = "Tahoma"
Option1.FontSize = 8
Option1.BackStyle = 0
Option1.Caption = "\<VBScript"
Option1.Value = 1
Option1.ControlSource = ""
Option1.Height = 17
Option1.Left = 5
Option1.Style = 0
Option1.Top = 5
Option1.Width = 57
Option1.AutoSize = .F.
Option1.Name = "Option1"
Option2.FontName = "Tahoma"
Option2.FontSize = 8
Option2.BackStyle = 0
Option2.Caption = "\<JScript"
Option2.ControlSource = ""
Option2.Height = 17
Option2.Left = 66
Option2.Style = 0
Option2.Top = 5
Option2.Width = 57
Option2.AutoSize = .F.
Option2.Name = "Option2"
�Top = 124
Left = 360
Height = 23
Width = 72
FontName = "Tahoma"
FontSize = 8
Cancel = .T.
Caption = "Cancel"
TabIndex = 11
Name = "cmdDone"
wspubcmdDone
commandbutton
commandbuttonwspubLabel3labellabelwspublabel.PROCEDURE Click
THISFORM.Release()
ENDPROC
l�� SShf%�
��U;T���-��%�C��a���
��j�9��C�-Error retrieving XML Web service description.�x��B�-���F������Z-�CC��fCC���f�CC��fCC��	�f	�CC�
�fCC��
�f	�C�f�C	�C'
	��
%�C4
��"�9��C�-Error retrieving XML Web service description.�x��B����CC�
�����UTHISENABLEDTHISFORMOWEB
ADDFOXCODEWSDLCWSALIASURINAMESERVICEPORTTYPE
UPDATESERVICEUNIQUEIDClick,��1���qA���AA!1�)Swsbuilder.pfSettings.pgServices�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "\<File(s) Location:"
Height = 15
Left = 11
Top = 127
Width = 78
TabIndex = 8
Name = "Label12"
�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
Caption = "Select Location for your XML Web Service Files"
Height = 15
Left = 12
Top = 6
Width = 225
TabIndex = 1
Name = "lblType"
	lblSelect
commandbutton�� ��P;%����UE5��<������
webservice�����INTELLISENSE��
��C����UTHISFORM
UPDATELISTClick,��1Q�1Y)�wsconfiglabellabellabelcheckbox�Top = 240
Left = 348
Height = 22
Width = 60
FontName = "Tahoma"
FontSize = 8
Cancel = .T.
Caption = "Cancel"
TabIndex = 13
Name = "cmdCancel"

commandbutton	cmdSelectwsuddi�Top = 216
Left = 74
Height = 22
Width = 60
FontName = "Tahoma"
FontSize = 8
Caption = "\<Delete"
TabIndex = 8
ZOrderSet = 7
Name = "Commandbutton1"
txtWSDLFilelabel_ws3.h&����-wstool
��� �
�
";%2d
t|�U�����T�����������������T��a����C���%����	���������(�C�
����#��CCC�
�
�C�
 C�
 ������������C����
����%�������T�����T����������T��������%�����}������������(����y�+T����
���C�
�����������T��������T���������%����������������T����C�_��T����C�_��T����C�
_��T������T����� ��T��!���"����C�����#�$�������(���#�������CC�
���#���#�%�������T���������C��
��&��U'ILNOPERATIONSTHIS	LEDITMODEOCALLEENACTION
CBOMETHODSENABLEDCLEARLWSFOUNDMENUADDITEM
OOPERATIONWSMETHOD	LISTCOUNT	LISTINDEXTXTOPERATIONVALUEDISPLAYVALUE
COLOPERATIONSCOUNTAOPERATIONSITEMWSOPERATIONWSDLLBLWSDLCTARGETTHISFORMEDTOPERATIONWSDESC	WSPARMNUM
CHKOFFLINELOFFLINECBOPARMSNPARMPROMPTCOLPARMSREMOVEADDUPDATEMETHOD����������
T�����F�������
���	����%��	��

����T�����T�����T�
���
���b�%T��CC����C�
 C�
 ���T��CC��(�)��(T�
�CC�����
C�,���6��%�CC���
��^�$T��CC����C�
 C�
 ���0T��CC���
���CC�C� ��\�6����T�������T����������
%������T�����
T�����+�a��W�)%�C�	������������������!��(%��	��C�	���fC�f	��"�!�� T���� (#C�_�)��T�������T�������T���������C��������
��C�	���ULINTERCHANGELCPARMSLCDESCLCMETHOD	LNCOUNTERTHISFORMOCALLEEOWEBCWSALIASTHISLWSFOUNDWSSYNTAXWSDOCUMENTATION	WSPARMNUMTIPS
CBOMETHODS	LISTINDEXPREFSWSMETHODDISPLAYVALUEENABLED	LISTCOUNTAOPERATIONS	LEDITMODE
OOPERATIONWSOPERATIONTXTOPERATIONVALUECOLPARMSGENPARMSUPDATEPARMS�������
�������T��������*T����C���
�-����	�6��
T�����%���
����!����
��%�C���
����9T���C��C���.���.���.��
�,����T���C��_�,�����T��C�C�>�=���
T����� %������C��
	����6T����Syntax: �C�
 C�
 C�
 C�
 ���%�C��
����;T����
Description: �C�
 C�
 C�
 C�
 ���!%�C��
�C��=�,��J�MT����Your Parameters: ��(��)C�
 C�
 C�
 C�
 ���*T����C�
 C�
 C�
 C�
 ��T���������U
LCPARMEXPRLOITEM
LCDESCPANELCDESCTHISCBOPARMSENABLED	WSPARMNUMCMDPARMS	LISTINDEXCOLPARMSCOUNTINPUTCONTROL
INPUTPROPERTY
INPUTVALUE
CBOMETHODS	LISTCOUNTWSSYNTAXWSDOCUMENTATIONWSMETHODWSDLEDTDESCVALUE�����B�U	TOOBJECT2	TUSOURCE2
TLSKIPSEARCH2setupws,��updatemethod���updateparmsp��Init���1����1�1A�qA!�AAAcq�AAb�1aaaAAA��AAA2B3q2�2�B���Q��!AAA"������AA�AAA!�AB�21�a��Q1���AA�A�aA�A�A�2B2�A1t,��
8T�
iqQ�)�
��� ����%W#�U������.%��������������A�B��T��������T��C������	��T�
��C��
���T��������T��C������	��T�
�
�C��
����F��
����T�
����� T��C�
wsBuilder2�
����T����
��%�C��
��I�<���^�
��C�����F%�C�
�
���O�+CC�
�
��fCC��������	f
	����-T����	�������C�
�
�����T�
�����T�
�
����U	LODETFORMLNITEMLCIDTHISPARENT
LSTCLIENTS	LISTINDEX	LISTCOUNT
LSTOPERATIONSLISTTHISFORM
OOPERATION
COLOPERATIONSOCLIENT
COLCLIENTSOWEBCWSALIASNACTIONCLASSLIBRARYOCALLEESETUPOBJECTSSHOW
CLIENTNAMEClick,��1��AAb��b��!q��Ad�A1�)�PROCEDURE Click
THIS.Enabled = .F.

IF !THISFORM.oWeb.AddFoxCode(THISFORM.wsdl, .T.)
	MESSAGEBOX(MB_ERRNOWSDL_LOC)
	RETURN .F.
ENDIF
SELECT (THISFORM.oWeb.cWSAlias)
LOCATE FOR UPPER(ALLTRIM(URI)) == UPPER(ALLTRIM(THISFORM.wsdl)) AND ;
	UPPER(ALLTRIM(Name)) == UPPER(ALLTRIM(THISFORM.Service)) AND ;
	UPPER(ALLTRIM(Port)) == UPPER(ALLTRIM(THISFORM.Port)) AND ;
	UPPER(Type)="C" AND !DELETE()
IF !FOUND()
	MESSAGEBOX(MB_ERRNOWSDL_LOC)
	RETURN
ENDIF
THISFORM.UpdateService(ALLTRIM(UniqueID))
ENDPROC
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "Add a new XML Web service..."
Height = 15
Left = 246
MousePointer = 15
Top = 41
Width = 149
TabIndex = 13
ForeColor = 0,0,255
ZOrderSet = 3
nvisitedforecolor = 16711680
Name = "lblNewWS"
dPROCEDURE InteractiveChange
THISFORM.UpdateService(ALLTRIM(THIS.List(THIS.ListIndex,2)))
ENDPROC
listboxlistboxwsbuilder.pfSettings.pgServicesShape1�FontName = "Tahoma"
FontSize = 8
Caption = "Publish XML Web Service"
Height = 15
Left = 12
Top = 5
Width = 120
TabIndex = 1
Name = "Label3"
Label1label�� ���A%����U"��CCC����������UTHISFORM
UPDATESERVICETHISLIST	LISTINDEXInteractiveChange,��1�1Y)��FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Height = 108
Left = 10
TabIndex = 3
Top = 56
Width = 384
ZOrderSet = 2
IntegralHeight = .T.
ItemTips = .T.
Name = "lstServices"
shapeshape	wsbuilder
pfSettings	pageframe�� ���@%q���U��C������UTHISFORMPROCESSFILETHISDISPLAYVALUEInteractiveChange,��112F)�lblNewwsconfiglabel�PROCEDURE Click
LOCAL lcStr, i
lcStr = ALLTRIM(THISFORM.txtUDDI.Value)
IF EMPTY(lcStr)
	RETURN
ENDIF

THISFORM.cboWS.Clear()
THISFORM.edtDetails.Value = ""

DIMENSION THISFORM.aUDDI[1,5]
STORE "" TO THISFORM.aUDDI

WAIT WINDOW SEARCHUDDI_LOC NOWAIT
THISFORM.SearchBusiness(lcStr)
THISFORM.SearchService(lcStr)
WAIT CLEAR

IF EMPTY(THISFORM.aUDDI[1,5])
	THISFORM.cboWS.Enabled = .F.
	THISFORM.cmdSelect.Enabled = .F.
	MESSAGEBOX(NOUDDIMATCH_LOC)
	RETURN
ENDIF

FOR i = 1 TO ALEN(THISFORM.aUDDI,1)
	THISFORM.cboWS.AddItem(THISFORM.aUDDI[m.i,3])
ENDFOR

THISFORM.cmdSelect.Enabled = .T.
THISFORM.cboWS.Enabled = .T.
THISFORM.cboWS.Listindex = 1
THISFORM.cboWS.InteractiveChange()

ENDPROC
o�� VV�%�
��Un(%�C�����O�
C����
	��Z�T���������T����������
��C����U	THISFORMOREFCBOWSDISPLAYVALUECNEWWSCNEWWSDLLBLWSDLCTARGETRELEASEClick,��1���A�1�)V�PROCEDURE Click
IF VARTYPE(THISFORM.oref) = "O" AND !EMPTY(THISFORM.cboWS.DisplayValue)
	THISFORM.oRef.cNewWS = THISFORM.cboWS.DisplayValue
	THISFORM.oRef.cNewWSDL = THISFORM.lblWSDL.cTarget
ENDIF

THISFORM.Release()
ENDPROC

commandbutton�Top = 87
Left = 423
Height = 22
Width = 24
FontName = "Tahoma"
FontSize = 8
Caption = "..."
Enabled = .T.
TabIndex = 7
Name = "cmdWSDLLoc"
.PROCEDURE Click
THISFORM.Refresh()
ENDPROC
�Top = 240
Left = 276
Height = 22
Width = 60
FontName = "Tahoma"
FontSize = 8
Caption = "Se\<lect"
Default = .T.
Enabled = .F.
TabIndex = 12
Name = "cmdSelect"

commandbuttonLabel1labellabelwsudditxtUDDIoWeb�Height = 269
Width = 419
Desktop = .T.
DoCreate = .T.
ShowTips = .T.
AutoCenter = .T.
BorderStyle = 2
Caption = "UDDI Search"
HalfHeightCaption = .T.
MaxButton = .F.
MinButton = .F.
AlwaysOnTop = .T.
Name = "wsuddi"
shapeShape1wsuddilabelQPROCEDURE InteractiveChange
THISFORM.ProcessFile(THIS.DisplayValue)

ENDPROC
�AutoSize = .F.
FontBold = .F.
FontName = "Tahoma"
FontSize = 8
FontUnderline = .F.
BackStyle = 1
Caption = "Results"
Height = 15
Left = 24
Top = 57
Width = 37
TabIndex = 3
Style = 3
Name = "Label1"
textboxtextboxwsuddiPROCEDURE Click
LOCAL loDetForm, lnItem, lcID

IF THIS.Parent.lstClients.ListIndex=0 OR THIS.Parent.lstClients.ListCount = 0
	RETURN
ENDIF

lnItem = THIS.Parent.lstOperations.ListIndex
lcID = THIS.Parent.lstOperations.List(lnItem,2)
THISFORM.oOperation = THISFORM.colOperations(lcID)

lnItem = THIS.Parent.lstClients.ListIndex
lcID = THIS.Parent.lstClients.List(lnItem,2)
THISFORM.oClient = THISFORM.oOperation.colClients(lcID)

SELECT (THISFORM.oWeb.cWSalias)
THISFORM.nAction = 2
loDetForm = NEWOBJECT("wsBuilder2", THISFORM.ClassLibrary)
loDetForm.oCallee = THISFORM
IF !loDetForm.SetupObjects()
	RELEASE loDetForm
ELSE
	loDetForm.SHOW()
ENDIF

* Update name if necessary
IF VARTYPE(THISFORM.oClient)="O" AND !UPPER(ALLTRIM(THISFORM.oClient.ClientName)) == ;
	UPPER(THIS.Parent.lstClients.List(THIS.Parent.lstClients.ListIndex))
	THIS.Parent.lstClients.List(THIS.Parent.lstClients.ListIndex)=ALLTRIM(THISFORM.oClient.ClientName)
ENDIF

THISFORM.oOperation = ""
THISFORM.oClient = ""
ENDPROC
�� ��7�%A�P�U&%���
�����%������C�~You currently have Operations defined for this service. Changing the service will cause these Operations to be lost. Continue?�$�x�	����B��,T����Add a new XML Web service...����C����������C����	�
����C����������C�����
��T���
���-��T���a��
�������T�����T�����T�����T�����T�����T�����T��a������5��<������
webservice�����INTELLISENSE���
��C����UTHISFORM
LFIRSTTIME
COLOPERATIONSCOUNTTHISCAPTIONREMOVE
PFSETTINGS	PGMETHODS
LSTOPERATIONSCLEAR
COLCLIENTS
LSTCLIENTS
PGSERVICES
LBLREFRESHVISIBLELWSFOUNDWSDLWSMLSERVICEPORTWSNAMEWSMETHOD	UPDATEALLClick,��1c
AA�AaAar���������A�QA�2�)�oTop = 216
Left = 11
Height = 168
Width = 384
BackStyle = 0
SpecialEffect = 0
Style = 3
Name = "Shape1"
	pageframe�� ��94%n�}�U
��C����
��C����UTHISFORMUPDATEOBJECTRELEASEClick,��1��1<)�GPROCEDURE Click
THISFORM.UpdateObject()
THISFORM.Release()
ENDPROC
	wsbuildercmdOK
commandbutton
commandbutton��� qq�%�(�U>%��������B��(T����C�������6��T���������T���������%��������T��	�
��\<Create��T����C�������*�T��	�
��\<Select��%�������&�#T����C����������
��C��
��UTHISFORM	CBOVIRDIR	LISTCOUNTSTYLETHISVALUETXTNEWVIRDIRENABLED	CMDGETDIRCMDOKCAPTIONLISTITEMDISPLAYVALUEREFRESHClick,��1qAA���B����q1AA�1)qQ�� 888�%����U����CٛThe selected class contains Currency or Variant return/parameter types. You should specify strong typing for these otherwise invalid WSDL may be generated.�x��UClick,��1q
1-)8_webservicestextbox"PROCEDURE Click
LOCAL lcID
IF MESSAGEBOX(MB_DELETEWS_LOC,36)=7
	RETURN
ENDIF
lcID = ALLTRIM(THISFORM.lstServices.List(THISFORM.lstServices.ListIndex, 2))
LOCATE FOR UniqueID = lcID AND !DELETED()
IF FOUND()
	REPLACE TYPE WITH "X"
	DELETE
	THISFORM.updatelist()
ENDIF

ENDPROC

commandbutton
commandbutton_ws3.hPixels�AutoSize = .F.
Top = 60
Left = 408
Height = 22
Width = 24
FontName = "Tahoma"
FontSize = 8
Caption = "..."
TabIndex = 5
Name = "cmdOpen"
�Top = 124
Left = 284
Height = 23
Width = 72
FontName = "Tahoma"
FontSize = 8
Caption = "\<Generate"
Default = .T.
Enabled = .T.
TabIndex = 10
Name = "cmdGen"
CArial, 0, 9, 5, 15, 12, 32, 3, 0
Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
_ws3.hPixelsClassLabel3
commandbutton
commandbuttonwspub�PROCEDURE Click
IF !THISFORM.lFirsttime
	* Enter here if reentrant
	IF THISFORM.colOperations.Count > 0 AND ;
	  MESSAGEBOX(OPENOPS_LOC, 36)=7
		RETURN
	ENDIF
	THIS.Caption = ADDNEWWS_LOC
	THISFORM.colOperations.Remove(-1)
	THISFORM.pfSettings.pgMethods.lstOperations .Clear()
	THISFORM.colClients.Remove(-1)
	THISFORM.pfSettings.pgMethods.lstClients.Clear()
	
	THISFORM.pfSettings.PgServices.lblRefresh.Visible = .F.
	THISFORM.lwsFound = .T.
	
	* Reset core properties
	WITH THISFORM
		.WSDL = ""
		.WSML = ""
		.Service = ""
		.Port = ""
		.wsname = ""
		.wsmethod = ""
		.lFirsttime = .T.
	ENDWITH
ELSE
	DO (_wizard) WITH "","webservice",,"INTELLISENSE"
ENDIF
THISFORM.UpdateAll()

ENDPROC
�Top = 436
Left = 296
Height = 22
Width = 60
FontName = "Tahoma"
FontSize = 8
Caption = "OK"
Default = .T.
TabIndex = 2
ZOrderSet = 2
Name = "cmdOK"
	wsbuildercustomlabel$�� r�%����UV���T��CCC�DLL;TLB;EXE�@���%�C��
�C�0	��O���C������ULCFILETHISFORMPROCESSFILEClick,��1q��A2�)wstool.pf1.pgOptions�Top = 208
Left = 456
Height = 23
Width = 72
FontName = "Tahoma"
FontSize = 8
Cancel = .T.
Caption = "Cancel"
TabIndex = 13
Name = "cmdCancel"

_ws3utils.vcx>Top = 204
Left = 12
Height = 24
Width = 24
Name = "oWeb"
txtActionURI>Top = 379
Left = 16
Height = 16
Width = 17
Name = "oWeb"

_ws3utils.vcx_webservicesLabel1��� ���%Q9�U���� T��C���������%�C����@�
F�����m�F����CC����������#)�T��	�
����ULCALIASTHISFORMOADAPTERTABLESITEMTHIS	LISTINDEXALIASTOCURSORGRID1RECORDSOURCEInteractiveChange,��1q�����AR12)�RTop = 12
Left = 60
Height = 2
Width = 372
SpecialEffect = 0
Name = "Shape1"
textbox�PROCEDURE pgMethods.Activate
THIS.cmdEdit.Enabled = THIS.lstOperations.ListCount>0
THIS.cmdEdit2.Enabled = THIS.lstClients.ListCount>0
THIS.cmdDel.Enabled = THIS.lstOperations.ListCount>0
THIS.cmdDel2.Enabled = THIS.lstClients.ListCount>0

IF THIS.lstOperations.ListIndex = 0 AND THIS.lstOperations.ListCount>0
	THIS.lstOperations.ListIndex = 1
ENDIF

IF THIS.lstClients.ListIndex = 0 AND THIS.lstClients.ListCount>0
	THIS.lstClients.ListIndex = 1
ENDIF

ENDPROC

_ws3utils.vcxtextboxtextbox*updatecontrols 
Class	wsmanager
_ws3utils.vcxwspicker3AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
WordWrap = .T.
Caption = "Select a COM component from which to generate XML web service files. Use the Advanced dialog if you do not want previously used or default settings."
Height = 28
Left = 12
Top = 24
Width = 385
TabIndex = 2
Name = "Label1"

commandbuttonwstool.pf1.pgURIswspub�Height = 33
Width = 91
cproxyclass = 
cproxyclasslib = 
cproxyvar = 
lcustomclientcode = .T.
cwsname = 
cgenwsdl = 
cgenwsml = 
cgenservice = 
cgenport = 
cgenparms = 
cproxyclassinit = 
cgenvar = 
ladderrorcode = .T.
Name = "wsproxy"
shapecmdAdv�Top = 124
Left = 12
Height = 23
Width = 72
FontName = "Tahoma"
FontSize = 8
Caption = "\<Advanced..."
TabIndex = 8
Name = "cmdAdv"
�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "\<Message Namespace URI:"
Height = 15
Left = 12
Top = 164
Width = 127
TabIndex = 6
Name = "lblMessageURI"
�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "\<Schema Type Definition Namespace URI:"
Height = 15
Left = 12
Top = 104
Width = 197
TabIndex = 4
Name = "lblSchemaURI"
�� ���%8a
G�U����F%�C�/Do you want to delete the selected Web service?�$�x���Q�B��"T��CC����������-����C'
	��%�C4����>���X���
��C�����ULCIDTHISFORMLSTSERVICESLIST	LISTINDEXUNIQUEIDTYPE
UPDATELISTClick,��1qaAA!Q��A�A2)�6�� Q�%����U
��C����UTHISFORM
CHECKCLASS
��C����UTHISINTERACTIVECHANGEInteractiveChange,��ProgrammaticChangeV��1�3�24]w)
lblMessageURIwstool.pf1.pgURIs
txtMessageURItextboxwstool.pf1.pgURIsShape1�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Enabled = .T.
Height = 22
Left = 107
TabIndex = 19
Top = 195
Width = 156
Name = "txtAppName"
wstool.pf1.pgMethodsshape�� ���&%����U7%�C��
���B��
��C����
��C����UTHISFORM
CHECKPATHS
UPDATESETSRELEASEClick,��1!AA��2i)�checkbox�ErasePage = .T.
PageCount = 2
TabStyle = 1
Top = 12
Left = 12
Width = 410
Height = 420
TabIndex = 1
ZOrderSet = 5
Name = "pfSettings"
Page1.FontName = "Tahoma"
Page1.FontSize = 8
Page1.Caption = "\<1. Services"
Page1.HelpContextID = 1231129
Page1.Name = "pgServices"
Page2.FontName = "Tahoma"
Page2.FontSize = 8
Page2.Caption = "\<2. Operations"
Page2.HelpContextID = 1231130
Page2.Name = "pgMethods"
Shape1�FontName = "Tahoma"
FontSize = 8
Value = http://tempuri.org/Proj1/message/
ControlSource = ""
Height = 22
InputMask = (REPLICATE("X",254))
Left = 35
TabIndex = 7
Top = 185
Width = 408
Name = "txtMessageURI"
imageimageshapeWlfirsttime Reserved.
ooperation Reserved.
naction Reserved.
lwsfound Reserved.
csavenotify Reserved.
oclient Reserved.
operationclass Reserved.
operationclasslib Reserved.
*updateall Reserved.
*updateservice Reserved.
*loadobject Reserved.
*updateobject Reserved.
*updateclients Reserved.
*displayerror Reserved.
*getcontainer 
�PROCEDURE InteractiveChange
THISFORM.CheckClass()

ENDPROC
PROCEDURE ProgrammaticChange
THIS.InteractiveChange()

ENDPROC
wspicker_ws3.ho���-wsconfig_ws3.hPixelsClass$�� �v%i���U3����%���
��,���C������UNKEYCODE
NSHIFTALTCTRLTHISFORMCMDOKCLICKn���%�������B��"T��CC����������T�������T��	�
����ULCURITHIS	LISTCOUNTTHISFORMLSTSERVICESLIST	LISTINDEXLBLWSDLCTARGETLBLURICAPTIONKeyPress,��InteractiveChange���1�A2qAAA!111g�Q)chkPHookwstool.pf1.pgOptionscheckboxcheckbox
chkUnicodewstool*Top = 11
Left = 16
Height = 465
Width = 433
DoCreate = .T.
BorderStyle = 2
Caption = "XML Web Service Builder"
MaxButton = .F.
MinHeight = -1
MinWidth = 300
WindowType = 1
HelpContextID = 1231128
naction = 0
lwsfound = .T.
operationclass = 
operationclasslib = 
Name = "wsbuilder"
CArial, 0, 9, 5, 15, 12, 32, 3, 0
Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
wsconfig�Top = 214
Left = 12
Height = 15
Width = 272
FontName = "Tahoma"
FontSize = 8
Caption = "Set selected URL as \<default Web service location"
Value = .F.
ControlSource = ""
TabIndex = 11
Name = "chkDefault"
wsconfig
chkDefaultcheckboxcheckbox�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
WordWrap = .T.
Caption = "Choose Existing to select an existing location to publish your Web service(s). Select New to create a new virtual directory, which will be created below the level selected in the dropdown. If you select Cancel, you will be prompted later."
Height = 41
Left = 12
Top = 24
Width = 505
TabIndex = 2
Name = "lblDesc"
wsconfiglblDesclabellabel�PROCEDURE Click
LOCAL lcPath
lcPath = GETDIR("",SELECTVIRDIR_LOC,"",66)
IF !EMPTY(lcPath)
	THISFORM.txtpath.Value=lcPath
ENDIF

ENDPROC
wsconfig	cmdGetDir
commandbutton#PROCEDURE Click
IF THISFORM.cboVirDir.ListCount=0
	RETURN
ENDIF
THISFORM.cboVirDir.Style = IIF(THIS.Value=1,0,2)
THISFORM.txtNewVirDir.Enabled = (THIS.Value#1)
THISFORM.cmdGetDir.Enabled = (THIS.Value#1)

IF THIS.Value=2
	THISFORM.cmdOK.Caption=BTN_CREATE_LOC
	THISFORM.cboVirDir.Value=THISFORM.cboVirDir.ListItem[1]
ELSE
	THISFORM.cmdOK.Caption=BTN_SELECT_LOC
	IF THISFORM.cboVirDir.ListCount>0
		THISFORM.cboVirDir.DisplayValue=THISFORM.cboVirDir.ListItem[THISFORM.cboVirDir.ListCount]
	ENDIF
ENDIF
THISFORM.Refresh()
ENDPROC
wstool.pf1.pgMethods�� ��ͽ%Rs	a�U�%T���CC����������%�C�����O����!��C���	cRetvalue��
��%��C���
lUseCustom���
��(��C���
lAddErrorCode���
���
��C��	��U
THISFORM	CRETVALUELSTSERVICESLIST	LISTINDEX	ORETVALUE	CHKCUSTOMVALUECHKERRORRELEASEClick,��1Q�Q�A�2)�shapeshapewspubLabel6cmdOKDataSession = 2
Top = 20
Left = 19
Height = 156
Width = 442
Desktop = .T.
DoCreate = .T.
ShowTips = .T.
BorderStyle = 2
Caption = "Visual FoxPro XML Web Services Publisher"
MaxButton = .F.
MinButton = .F.
WindowType = 1
HelpContextID = 1230989
Name = "wspub"
�lhaderror Reserved.
lskiperror Reserved.
*processfile Reserved.
*checkclass Reserved.
*generatews Reserved.
*savepos Reserved.
*loadpos Reserved.
*checkiis Reserved.
*checkmethods Reserved.
*checkisapi Reserved.
bAutoSize = .F.
FontName = "Tahoma"
FontSize = 8
WordWrap = .T.
Caption = "Select specific XML Web service files to generate. Change the file name, location, URL reference and other options if one of the default settings is not appropriate. These settings will be saved."
Height = 41
Left = 12
Top = 24
Width = 469
TabIndex = 2
Name = "Label5"
cboInterface	pageframelabel�� ��%�
��U�����T������(T��C�����������������%�������)T����	�
�C�
�������B��%T��C����������������%�������&T����	�
�C�
�������ULNPOSLCURLTHISDISPLAYVALUETHISFORMOWEBAVIRDIRSPF1	PGOPTIONSTXTWSDLFILEVALUEAURISInteractiveChange,��1���AASaA2�)�wstool.pf1.pgOptions�Top = 132
Left = 492
Height = 23
Width = 24
FontName = "Tahoma"
FontSize = 8
Caption = "..."
Default = .F.
Enabled = .F.
TabIndex = 8
Name = "cmdGetDir"

commandbuttonwsconfigtxtPathtextboxtextbox�� ��g�%�.&�U������%�CC�
��"�Q��%����-��}�T����a��T����-��T�����	Data View��B����T����-��T����a��T�����XML View�����e�G.�%���	��(�T��
�C�
xmladapter�N��T������T��
��a��$��CC���C�����
�
����C����� �����(���
������ T��C�
���
�����%�C������Q�������C��������(T�����.Net Dataset Cursors:��T�������T����a����C������Q���C����T����C�����C���������2��C�&Could not create a Fox cursor from XML�x��T����a��T����-��T�����	Data View����ULOXMLILCALIASTHISFORM
OLEBROWSERVISIBLEGRID1	LBLBROWSECAPTIONLDATASETOADAPTERRETURNVALUEMAPN19_4TOCURRENCYATTACHITEM
CBOCURSORSCLEARTABLESCOUNTALIASADDITEM
LBLRESULTS	LISTINDEXINTERACTIVECHANGERECORDSOURCEAUTOFITClick,��1��AAR�A��A�a�A��AAA�1��!A�!�A2)�F�� --x=%����U�����T��C������%�C����3�B����C�����T����������������J���(���7R,:��,Searching UDDI database for your request....����C���	����C���
��R�%�CC�������?�T����-��T����-��"��C�No UDDI matches found.�x��B�������(�C������� ��CC�
�������
����T����a��T����a��T���������C�����ULCSTRITHISFORMTXTUDDIVALUECBOWSCLEAR
EDTDETAILSAUDDISEARCHBUSINESS
SEARCHSERVICEENABLED	CMDSELECTADDITEM	LISTINDEXINTERACTIVECHANGEClick,��1�Q�AA1brQ�!AA�A12�)-�� �%q���U�����T��C�������T��C�������%�CC������
����6T���C�
 C�
 C�
 C�
 C��������%�CC������
����6T���C�
 C�
 C�
 C�
 C��������%�C��
��&�)T���C�
 C�
 C�
 C�
 ����T�������T���	����/%�C�WSDL����C�.ASMX�������T��
��a��T����a�����T��
��-��T����-���U
LCDESCPANELCWSDLTHISFORMAUDDITHIS	LISTINDEX
EDTDETAILSVALUELBLWSDLCTARGET	CMDSELECTENABLEDInteractiveChange,��1����aA�aA�A22��A2�)��� ��xF%0W?�U����T������T������T��C�wsuddi�����T��������C�����%�C���
������C�������T���	������U
LOFORMTHISFORMCNEWWSDLCNEWWSCLASSLIBRARYOREFSHOWCBOWSDLADDITEMVALUEClick,��1q�1aaA2))�labelcboWSDLFilecomboboxtextboxlblSchemaURIlabel�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "A\<pplication:"
Height = 15
Left = 46
Top = 198
Width = 58
TabIndex = 18
Name = "Label7"
shapeShape2wstool.pf1.pgOptionsSTop = 229
Left = 11
Height = 2
Width = 446
SpecialEffect = 0
Name = "Shape2"
\PROCEDURE setupws
LOCAL i, lnOperations

THIS.lEditMode= (THIS.oCallee.nAction=2)

* Add all methods to dropdown
WITH THIS.cboMethods
	.Enabled=.T.
	.Clear()
	IF THIS.oCallee.lwsfound
		FOR i = 1 TO GETWORDCOUNT(Menu)
			.AddItem(ALLTRIM(GETWORDNUM(Menu,m.i,CHR(13)+CHR(10))))
		ENDFOR
	ELSE
		.AddItem(THIS.oCallee.oOperation.wsMethod)
	ENDIF
	IF .ListCount>0
		.ListIndex=1
		THIS.txtOperation.Value = .DisplayValue
	ENDIF
ENDWITH

* Create array of existing Operations for quick lookup later.
lnOperations=THIS.oCallee.colOperations.Count
IF lnOperations>0
	DIMENSION THIS.aOperations[lnOperations]
	FOR i = 1 TO lnOperations
		THIS.aOperations[m.i] = THIS.oCallee.colOperations.Item(m.i).wsOperation
	ENDFOR
ENDIF

THIS.WSDL= THIS.oCallee.WSDL
THIS.lblWSDL.ctarget = THIS.oCallee.WSDL

* User clicked Edit button
IF THIS.lEditMode
	WITH THIS.oCallee.oOperation
		THISFORM.txtOperation.Value = TRANSFORM(.wsOperation)
		THISFORM.edtOperation.Value = TRANSFORM(.wsDesc)
		THISFORM.cboMethods.DisplayValue = TRANSFORM(.wsMethod)
		THISFORM.wsparmnum = .wsparmnum
		THISFORM.chkOffline.Value = .lOffline
		THISFORM.cboParms.ListIndex = .nParmPrompt
		THISFORM.colParms.Remove(-1)
		FOR i = 1 TO .colParms.Count
			THISFORM.colParms.Add(.colParms.Item(m.i))
		ENDFOR
	ENDWITH
ENDIF

THIS.oCallee.nAction = 0

THIS.UpdateMethod(!THIS.lEditMode)

ENDPROC
PROCEDURE updatemethod
LPARAMETERS lInterChange

LOCAL lcParms, lcDesc, lcMethod, lnCounter
lcDesc = ""

SELECT (THISFORM.oCallee.oWeb.cWSAlias)

WITH THIS

	IF !THIS.oCallee.lWSFound
		.wsSyntax = ""
		.wsdocumentation = ""
		.wsParmnum = THISFORM.wsparmnum
	ELSE
		.wsSyntax  = ALLTRIM(GETWORDNUM(Tips,.cboMethods.ListIndex,CHR(13)+CHR(10)))
		lcParms = ALLTRIM(STREXTRACT(.wsSyntax, "(", ")"))
		.wsParmnum = IIF(EMPTY(lcParms),0,OCCURS(",",lcParms)+1)
		IF !EMPTY(ALLTRIM(prefs))
			lcDesc = ALLTRIM(GETWORDNUM(Prefs,.cboMethods.ListIndex, CHR(13)+CHR(10)))
			.wsdocumentation = IIF(GETWORDCOUNT(lcDesc)<2,"",ALLTRIM(SUBSTR(lcDesc,ATC(" ", lcDesc))))
		ENDIF
	ENDIF
	
	.wsMethod = .cboMethods.DisplayValue
	.cboMethods.Enabled = .cboMethods.ListCount>0
	IF lInterChange
		* Find next available number
		lcMethod = .wsMethod
		lnCounter = 2
		DO WHILE .T.
			IF ASCAN(THIS.aOperations, lcMethod,-1,-1,-1,7)=0
				EXIT
			ENDIF
			IF THIS.lEditmode AND UPPER(THIS.oCallee.oOperation.wsOperation)==UPPER(lcMethod)
				EXIT
			ENDIF
			lcMethod = .wsMethod +  " (#" + TRANSFORM(lnCounter) + ")"
			lnCounter = lnCounter + 1
		ENDDO
		.txtOperation.Value = lcMethod		
		.coLParms.wsSyntax = .wsSyntax
		.coLParms.GenParms()
	ENDIF

ENDWITH

THIS.UpdateParms()
ENDPROC
PROCEDURE updateparms
LOCAL lcParmExpr, loItem, lcDescPane, lcDesc

WITH THIS
	.cboParms.Enabled = .wsParmnum>0
	.cmdParms.Enabled = IIF(!.cboParms.Enabled, .F., .cboParms.ListIndex=1)
	lcParmExpr = ""
	IF .colParms.Count#0
		FOR EACH loItem IN .colParms
			IF !EMPTY(loItem.InputControl)
				lcParmExpr = lcParmExpr + GETWORDNUM(loItem.InputControl,GETWORDCOUNT(loItem.InputControl,"."),".") + "." + loItem.InputProperty + ","
			ELSE
				lcParmExpr = lcParmExpr + TRANSFORM(loItem.InputValue) + ","
			ENDIF
		ENDFOR
		lcParmExpr =LEFT(lcParmExpr , LEN(lcParmExpr )-1)
	ENDIF
	
	* Update edtDesc
	lcDescPane=""
	IF .cboMethods.ListCount>0 AND !EMPTY(.wsSyntax)
		lcDescPane = lcDescPane + SYNTAX_LOC + .wsSyntax + CRLF + CRLF
	ENDIF
	IF !EMPTY(.wsdocumentation)
		lcDescPane = lcDescPane + DESCRIPT_LOC + .wsdocumentation + CRLF + CRLF
	ENDIF
	IF !EMPTY(lcParmExpr) OR LEFT(lcParmExpr,1)=","
		lcDescPane = lcDescPane + YOURPARMS_LOC + .wsMethod +"(" + lcParmExpr +")" +CRLF + CRLF
	ENDIF

	lcDescPane = lcDescPane + .wsdl + CRLF + CRLF
	
	THIS.edtDesc.Value = lcDescPane

ENDWITH
ENDPROC
PROCEDURE Init
LPARAMETER toObject2, tuSource2, tlSkipSearch2
RETURN
ENDPROC
�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Height = 22
Left = 132
ReadOnly = .T.
TabIndex = 7
Top = 132
Width = 352
Name = "txtPath"
wsconfiglblPathlabellabelwsconfig_ws3.h&����-	wsfoxcode_ws3.hPixelsClasscustom	wsfoxcode�lhaderror Whether an error occurred.
lskiperror Whether to skip error reporting.
cwsalias Reference to the Fox Web Service table.
nsavearea Work area to save.
oweb Object reference to web service utility handler.
cproxygenclass Name of class to handle web service proxy code generation.
cproxygenclasslib Name of class library containing class to handle web service proxy code generation.
*gettip This code returns web service method parameter quick info used for Intellisense.
*getmethods This code returns web service methods used for Intellisense.
*main Main routine that gets called by IntelliSense engine.
*erroralert Displays error message.
*about About this class.
*getservice Parses editor content to determine reference to web service.
*getproxyclass Routine used to set the proxy class and classlib properties used to generate web service proxy code.
*getproxyobject Gets reference to proxy code generation object.
*getnextvar Finds next variable name.
!�� |B%����U.�����/T��C�registryC�Q�ffc\registry.vcx���
T�����e%�C���;CLSID\{3FEB0525-8310-44ab-9CCC-E0F49ED513B0}\InProcServer32�������'�%�C�wsdlgen�����#�!T��C����
\wsdlgen3.exe��%�C�0���RUN /n "&lcFile."

��C�������ULCVALUELCFILELOREG	GETREGKEYTHISFORMRELEASEClick,��1���Q��Q�AAA2�)�PROCEDURE Click
* Special handling if first time (Default Mode). Set default location to "*"
IF THISFORM.lDefaultMode
	THISFORM.oWeb.UpdatePrefs("URI","*")
ENDIF
THISFORM.RELEASE()

ENDPROC
wstool.pf1.pgURIstxtSchemaURI�PROCEDURE InteractiveChange
LOCAL lcDescPane, lcWSDL

lcWSDL = THISFORM.aUDDI[THIS.ListIndex,5]
lcDescPane = THISFORM.aUDDI[THIS.ListIndex,4]

IF !EMPTY(THISFORM.aUDDI[THIS.ListIndex,1])
	lcDescPane = lcDescPane + CRLF + CRLF + THISFORM.aUDDI[THIS.ListIndex,1]
ENDIF
IF !EMPTY(THISFORM.aUDDI[THIS.ListIndex,2])
	lcDescPane = lcDescPane + CRLF + CRLF + THISFORM.aUDDI[THIS.ListIndex,2]
ENDIF
IF !EMPTY(lcWSDL)
	lcDescPane = lcDescPane + CRLF + CRLF + lcWSDL
ENDIF

THISFORM.edtDetails.Value = lcDescPane

THISFORM.lblWSDL.cTarget = lcWSDL

IF ATC("WSDL", lcWSDL)#0 OR ATC(".ASMX",lcWSDL)#0
	THISFORM.cmdSelect.Enabled= .T. 
	THISFORM.lblWSDL.Enabled=.T.
ELSE
	THISFORM.cmdSelect.Enabled= .F.
	THISFORM.lblWSDL.Enabled=.F.
ENDIF

ENDPROC
�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Height = 23
Left = 12
TabIndex = 2
Top = 26
Width = 396
Name = "txtUDDI"
Label3label
cboCOMFilewspub
lblCOMFilewstoolcomboboxcomboboxwspub[�� BB�m%:�&}�UQ���T��CW����0�%�C�����,���C�����~�C�f�C����&��CC��� (C�	��)�����!��CC�
����������!��CC������������%����
�����T���������C������(�T�������T�����������8���J�
F������U
LCSAVEAREATHISOWEB
CHECKWSDBFLSTSERVICESCLEARTYPEADDLISTITEMCLASSNAMEUNIQUEID	NEWITEMIDURI	LISTCOUNT	LISTINDEXINTERACTIVECHANGELBLWSDLCTARGETLBLURICAPTION$%����ON���GZ� ��UTHISCSAVENOTIFYb���%�C����O��,�T�������T���C�NOTIFY�v��GZ��
��C����U
ORETOBJECTTHIS	ORETVALUECSAVENOTIFY
UPDATELISTB�����UTHIS	CRETVALUE
updatelist,��Destroy?��Initz��Unload��1q��AQaAq1�11AA���A3aqA3qQA�q�3�2�����!$��+)BQ�� 888�%����U[���T��C������%�C��
��G���C�Tips�������
��C����ULCWSDLTHISFORMCBOWSDLDISPLAYVALUEOWEBUPDATEPREFSRELEASEClick,��1qQ�A�2�)8�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Enabled = .F.
Height = 22
Left = 192
TabIndex = 10
Top = 163
Width = 324
Name = "txtNewVirDir"
�ErasePage = .T.
PageCount = 3
TabStyle = 1
Top = 80
Left = 12
Width = 470
Height = 308
TabIndex = 4
TabOrientation = 1
Name = "pf1"
Page1.FontName = "Tahoma"
Page1.FontSize = 8
Page1.FontCharSet = 0
Page1.Caption = "Options"
Page1.Name = "pgOptions"
Page2.FontName = "Tahoma"
Page2.FontSize = 8
Page2.FontCharSet = 0
Page2.Caption = "Methods"
Page2.Name = "pgMethods"
Page3.FontName = "Tahoma"
Page3.FontSize = 8
Page3.FontCharSet = 0
Page3.Caption = "Namespaces"
Page3.Name = "pgURIs"
RTop = 397
Left = 12
Height = 21
Width = 24
lusingwizard = .T.
Name = "oWeb"
Label5wstoollabellabel
commandbutton
commandbuttoncmdOpenwspublabellabelLabel2wspubcomboboxz�� aa�:%���U9�����T��C������T��C������%�C�0
����:��C�.You must first select a valid COM server file.�x��B��%�C������/��C�#You must select a valid class name.�x��B��+%�C�����
����	
	���B��%T��C�wstool��
������
��C����ULOWS	LCCOMFILELCCLASSTHISFORM
CBOCOMFILEDISPLAYVALUECBOINTERFACEOWEBAUTOWSLPREFSLOADEDCLASSLIBRARYSHOWClick,��1�RQ�AA��AA�AAR�2�)a��� ���&%�C�U����5���
T�����
T�����5T��C�wsconfig����lcURL�	lcDefPath���T���-��
��C����T��C����%�C������B��*T��CC��R�/�����/6��T���	�
�����#�����(����	��
��W�(%�CC�
����	��fC�f��S�T���	����
���B������C����	����T���	������%�CC����
����"���C����������$T���C�����������$T���C�����������ULOCONFIGILCURL	LCDEFPATHTHISFORMCLASSLIBRARYLDEFAULTMODESHOWPF1	PGOPTIONSTXTWSDLFILEVALUECBOWSDLFILE	LISTCOUNTLIST	LISTINDEXADDITEMDISPLAYVALUEAURISClick,��1����Q����AA��3��AAA��r!ABA2�)�MHeight = 239
Width = 542
Desktop = .T.
DoCreate = .T.
AutoCenter = .T.
BorderStyle = 2
Caption = "Visual FoxPro XML Web Service Location"
MaxButton = .F.
MinButton = .F.
WindowType = 1
AlwaysOnTop = .T.
HelpContextID = 1231136
ldefaultmode = .F.
curllocation = 
curlpath = 
cdefuri = 
cdefpath = 
Name = "wsconfig"
textboxtextboxtextbox�PROCEDURE gettip
LPARAMETER lcLine
LOCAL i, lcMethod, lcTip, aTmp, lnLines, lcExpr 
lcTip=""
lcExpr = ALLTRIM(SUBSTR(lcLine,RAT(".",lcLine)+1))
DIMENSION aTmp[1]
lnLines = ALINES(aTmp,tips)
FOR i = 1 TO lnLines
	lcMethod = aTmp[m.i]
	lcMethod = GETWORDNUM(lcMethod,GETWORDCOUNT(lcMethod,"."),".")	
	IF !EMPTY(lcMethod) AND ATC(lcExpr,lcMethod)#0
		lcTip = lcMethod
		EXIT
	ENDIF
ENDFOR	
RETURN ALLTRIM(lcTip)

ENDPROC
PROCEDURE getmethods
LPARAMETERS aMeths
LOCAL i,lcMethod,lnCount,aTmp,lnLines,lcDesc
lnCount=0
DIMENSION aTmp[1]
IF EMPTY(ALLTRIM(Prefs))
	lnLines = ALINES(aTmp, menu)
ELSE
	lnLines = ALINES(aTmp, prefs)
ENDIF
FOR i = 1 TO lnLines
	lcDesc=""
	lcMethod = aTmp[m.i]
	lcMethod = GETWORDNUM(lcMethod, 1)
	IF GETWORDCOUNT(aTmp[m.i])>1
		lcDesc = ALLTRIM(SUBSTR(aTmp[m.i],ATC(" ",aTmp[m.i])))
	ENDIF
	IF !EMPTY(lcMethod)
		lnCount = lnCount+1
		DIMENSION aMeths[lnCount,2]
		aMeths[lnCount,1]=lcMethod  && method name
		aMeths[lnCount,2]=lcDesc	&& description
	ENDIF
ENDFOR
RETURN lnCount

ENDPROC
PROCEDURE main
* This is Main routine that gets called from IntelliSense script (XML Web Service).
LPARAMETER oFoxCode
LOCAL  lnMethods, laMethods, lcTip, lcTrigger, loWSPicker, loParm, lcGenCode, loProxy

lcTrigger = RIGHT(oFoxCode.FullLine, 1)
oFoxcode.ValueType = "V"

IF oFoxcode.Location=0	&&Command Window
	RETURN oFoxcode.UserTyped
ENDIF

DO CASE
CASE UPPER(ALLTRIM(oFoxCode.Abbrev))="WS"
	* Handle custom WS keyboard shortcut here. 
	
	* Call Web Service picker form.
	loParm = CREATEOBJECT("Custom")
	loWSPicker = NEWOBJECT("wspicker", THIS.ClassLibrary, "", loParm)
	loWSPicker.Show()
	IF TYPE("loParm.cRetvalue")#"C" OR EMPTY(ALLTRIM(loParm.cRetvalue))
		RETURN ""
	ENDIF
	
	* Call proxy code gen class to get object reference
	loProxy = THIS.GetProxyObject(loParm.cRetvalue)
	IF VARTYPE(loProxy) # "O"
		RETURN ""
	ENDIF
	
	IF TYPE("loParm.lUseCustom")="L"
		loProxy.lCustomClientCode=loParm.lUseCustom
	ENDIF
	
	IF TYPE("loParm.lAddErrorCode")="L"
		loProxy.lAddErrorCode=loParm.lAddErrorCode
	ENDIF

	* Call routine to get code -- note: could set properties on object first if needed
	lcGenCode = loProxy.GetProxyCode()
	IF !EMPTY(lcGenCode)
		KEYBOARD '{BACKSPACE}'  && adjust for IntelliSense
	ENDIF
	RETURN lcGenCode

CASE lcTrigger = "."
	* Handle list of XML Web service operations (methods). This is a List Members list.
	* Try to find web service. Note: if not found, then skip it since user removed reference marker.
	IF !THIS.GetService(oFoxCode.UserTyped, lcTrigger)
		RETURN ""
	ENDIF
	* Get list of methods to display	
	DIMENSION laMethods[1]
	lnMethods = THIS.GetMethods(@laMethods)
	IF lnMethods # 0
		DIMENSION oFoxcode.Items[lnMethods,2]
		FOR i = 1 TO lnMethods
			oFoxcode.Items[m.i,1] = laMethods[m.i,1] && method name
			oFoxcode.Items[m.i,2] = laMethods[m.i,2] && method description
			oFoxcode.Icon = HOME()+"ffc\graphics\method.bmp"
		ENDFOR
		oFoxcode.ValueType = "L"
	ENDIF
	
CASE lcTrigger = "("
	* Handle list of XML Web service operation (method) parameters. This is Quick Info tip.
	IF !THIS.GetService(oFoxCode.UserTyped, lcTrigger)
		RETURN ""
	ENDIF
	lcTip = THIS.GetTip(oFoxCode.FullLine)
	IF !EMPTY(lcTip)
		oFoxcode.ValueTip = lcTip
		oFoxcode.ValueType = "T"
	ENDIF
	
CASE ATC("XML Web Service", oFoxcode.MenuItem) # 0
	RETURN ["XML Web Service"]
	
ENDCASE

RETURN ""

ENDPROC
PROCEDURE erroralert
LPARAMETERS tcMessage
MESSAGEBOX(tcMessage)

ENDPROC
PROCEDURE about
*!*	This class is the core class used for following:
*!*	- Handing of IntelliSense for registered XML Web services

ENDPROC
PROCEDURE getservice
LPARAMETER lcUserTyped, lcTrigger

* This routine retrieves the XML Web service info from editor.
LOCAL lcOps, lcUserTyped, lnWordCount, lcLastWord , laEnv
LOCAL lnWinHdl, lcfxtoollib, laLines, lcStr, lcSearchExpr, lnPos
LOCAL lcWSInfo, lcURI, lcService, lcPort
DO CASE
CASE lcTrigger="."
	lcOps = [><(:;,?/[-+*&^%$#@!.=]
	lcUserTyped = ALLTRIM(lcUserTyped)
	lcUserTyped = CHRTRAN(lcUserTyped, lcOps, REPLICATE(" ", LEN(lcOps)))
	lnWordCount = GETWORDCOUNT(lcUserTyped)
	lcLastWord = ALLTRIM(GETWORDNUM(lcUserTyped,lnWordCount))
CASE lcTrigger="("
	lnWordCount = GETWORDCOUNT(lcUserTyped,".")
	lcLastWord = ALLTRIM(GETWORDNUM(lcUserTyped,lnWordCount-1,"."))
OTHERWISE
	RETURN .F.
ENDCASE

lcfxtoollib = SYS(2004)+"FOXTOOLS.FLL"
IF !FILE(lcfxtoollib)
	RETURN .F.
ENDIF
SET LIBRARY TO (m.lcfxtoollib) ADDITIVE
lnWinHdl = _WONTOP()
_wselect(lnWinHdl)

DIMENSION laEnv[25]
_EdGetEnv(lnWinHdl ,@laEnv)
lcStr = _EDGETSTR(lnWinHdl , 0, laEnv[17])
DIMENSION laLines[1]
ALINES(laLines,lcStr)

*  #DEFINE	WSMARKER			"*__VFPWSDef__: "
*  LOCAL myWebService AS "XML Web Service"
*  *__VFPWSDef__: myWebService = http://myserver/myservice/foxws.wsdl, foxws, class1SoapPort

lcSearchExpr = WSMARKER + lcLastWord+" = "
lnPos=ASCAN(laLines,lcSearchExpr,-1,-1,1,5)
IF lnPos=0
	RETURN .F.
ENDIF
lcWSInfo = SUBSTR(laLines[lnPos],LEN(lcSearchExpr))
lcURI = ALLTRIM(GETWORDNUM(lcWSInfo,1,","))	&& URI
lcService = ALLTRIM(GETWORDNUM(lcWSInfo,2,","))	&& Service
lcPort = ALLTRIM(GETWORDNUM(lcWSInfo,3,","))	&& Port

LOCATE FOR ALLTRIM(URI)=lcURI AND ALLTRIM(Name)=lcService AND ;
  ALLTRIM(Port)=lcPort AND UPPER(Type)="C"
  
IF !FOUND()
	* This handles case for WS not registered on a specific machine. 
	IF MESSAGEBOX(MB_WSNOTFOUND_LOC+MB_WSNOTFOUND1_LOC,36)=7
		RETURN .F.
	ENDIF
	IF !THIS.oWeb.AddFoxCode(lcURI, .T.)
		THIS.oWeb.Alert(MB_ERRNOWSDL_LOC)
		RETURN .F.
	ENDIF
	LOCATE FOR ALLTRIM(URI)=lcURI AND ALLTRIM(Name)=lcService AND ;
	  ALLTRIM(Port)=lcPort AND UPPER(Type)="C"
	IF !FOUND()	&& problem registering 
		RETURN .F.
	ENDIF
ENDIF

ENDPROC
PROCEDURE getproxyclass
* Get cProxyGenClass PEMs in case user wants to use customized Proxy Gen class.
* These get stored in the FOXWS3 file. The custom proxy gen class must have a
* GetProxyCode method which returns proxy code to insert.

* Need to check here for user-defined class

IF VARTYPE(THIS.cProxyGenClass)#"C" OR EMPTY(ALLTRIM(THIS.cProxyGenClass))
	THIS.cProxyGenClass = DEFPROXYGEN_CLASS
ENDIF
IF VARTYPE(THIS.cProxyGenClasslib)#"C" OR EMPTY(ALLTRIM(THIS.cProxyGenClasslib))
	THIS.cProxyGenClasslib = THIS.ClassLibrary
ENDIF

ENDPROC
PROCEDURE getproxyobject
LPARAMETERS tcWSID

LOCAL loProxy
IF VARTYPE(tcWSID) # "C" OR EMPTY(ALLTRIM(tcWSID))
	RETURN ""
ENDIF

* Try to locate web service
SELECT (THIS.cWsalias)
LOCATE FOR ALLTRIM(UniqueID) == ALLTRIM(tcWSID)
IF !FOUND()
	RETURN ""
ENDIF

* Call proxy code gen class
THIS.lSkipError=.T.
THIS.GetProxyClass()
loProxy = NEWOBJECT(THIS.cProxyGenClass, THIS.cProxyGenClassLib)
THIS.lSkipError=.F.
IF VARTYPE(loProxy)#"O"
	RETURN ""
ENDIF
RETURN loProxy

ENDPROC
PROCEDURE getnextvar
* Retrieves next available variable name.
LOCAL lcfxtoollib, lnWinHdl, lcStr, laEnv, lcVar, lnCount

lcfxtoollib = SYS(2004)+"FOXTOOLS.FLL"
IF !FILE(lcfxtoollib)
	RETURN .F.
ENDIF
SET LIBRARY TO (m.lcfxtoollib) ADDITIVE
lnWinHdl = _WONTOP()
_wselect(lnWinHdl)

DIMENSION laEnv[25]
_EdGetEnv(lnWinHdl ,@laEnv)
lcStr = _EDGETSTR(lnWinHdl , 0, laEnv[17])

lcVar = WSGEN_DEFAULTVAR
lnCount = 2
DO WHILE .T.
	IF ATC("LOCAL "+lcVar, lcStr)=0
		EXIT
	ENDIF
	lcVar = WSGEN_DEFAULTVAR+TRANSFORM(lnCount)
	lnCount = lnCount+1
ENDDO

RETURN lcVar
ENDPROC
PROCEDURE Error
LPARAMETERS nError, cMethod, nLine
THIS.lhaderror=.T.
IF THIS.lSkiperror
	RETURN
ENDIF
LOCAL lcMessage
lcMessage = MESSAGE()
IF nError = 3
	lcMessage = lcMessage + " " + FOXWSINUSE_LOC
ENDIF
THIS.ErrorAlert(lcMessage)

ENDPROC
PROCEDURE Destroy
IF !EMPTY(THIS.cWSAlias) AND SELECT(THIS.cWSAlias)#0
	SELECT (THIS.cWSAlias)
	USE
ENDIF
SELECT (THIS.nSaveArea)

ENDPROC
PROCEDURE Init
* Check for our FOXWS3 file first
THIS.nSaveArea = SELECT()
THIS.oWeb = NEWOBJECT("_webservices", THIS.ClassLibrary)
IF VARTYPE(THIS.oWeb)#"O"
	RETURN .F.
ENDIF
IF !THIS.oWeb.Checkwsdbf()
	RETURN .F.
ENDIF
THIS.cWSAlias = THIS.oWeb.cWSAlias 

SYS(2030,1)

ENDPROC
0cwsalias = 
nsavearea = 0
Name = "wsfoxcode"
customimgVarwspub8PROCEDURE Click
MESSAGEBOX(MB_NOVARIANT_LOC)
ENDPROC
wstoolotypelib_utility.vcxcustomlabel_webserviceswstoolUAutoSize = .T.
FontName = "Tahoma"
FontSize = 8
WordWrap = .T.
BackStyle = 0
Caption = "Enter the name for your Web service. This is also the name used for the generated WSDL (and optional ASP) files. Specify the URI location to reference in the WSDL file."
Height = 28
Left = 11
Top = 9
Width = 432
TabIndex = 5
Name = "Label2"
txtNamewstool.pf1.pgOptionslabellabel�PROCEDURE Click
LOCAL loWS, lcCOMFile, lcClass

lcCOMFile = ALLTRIM(THISFORM.cboCOMFile.DisplayValue)
lcClass = ALLTRIM(THISFORM.cboInterface.DisplayValue)
IF !FILE(lcCOMFile)
	MESSAGEBOX(NODLL_LOC)
	RETURN
ENDIF
IF EMPTY(lcClass)
	MESSAGEBOX(NOCLASS_LOC)
	RETURN
ENDIF

* set default settings
IF !THISFORM.oWeb.AutoWS(lcCOMFile, lcClass) AND !THISFORM.oWeb.lPrefsLoaded
	RETURN
ENDIF

loWS = NEWOBJECT("wstool",THISFORM.ClassLibrary,"",THISFORM.oWeb)
loWS.Show()

ENDPROC

_ws3utils.vcxwspub_typelib�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "Listener \<Type:"
Height = 15
Left = 11
Top = 172
Width = 71
TabIndex = 3
Name = "Label6"
�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "Script:"
Height = 15
Left = 287
Top = 198
Width = 33
TabIndex = 12
Name = "Label8"
Label9label�Picture = graphics\info.bmp
Stretch = 1
Height = 23
Left = 408
Top = 93
Visible = .F.
Width = 29
ToolTipText = "The selected class contains Currency or Variant types. Click here for more information."
Name = "imgVar"
BTop = 397
Left = 35
Height = 27
Width = 25
Name = "otypelib"
STop = 132
Left = 216
Height = 22
Width = 36
lusingwizard = .T.
Name = "oWeb"
_utility.vcxcustomoTypelibwspub�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Height = 23
Left = 192
TabIndex = 5
Top = 100
Width = 324
InputMask = (REPLICATE("X",255))
Name = "cboVirDir"
�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
Caption = "Select \<Location (Virtual Directory):"
Height = 15
Left = 24
Top = 104
Width = 166
TabIndex = 4
Name = "lblSelect"
textboxwstool.pf1.pgURIs
lblWSDLURIwstool.pf1.pgURIs�FontName = "Tahoma"
FontSize = 8
Value = http://tempuri.org/Proj1/type/
ControlSource = ""
Height = 22
InputMask = (REPLICATE("X",254))
Left = 35
TabIndex = 5
Top = 125
Width = 408
Name = "txtSchemaURI"
CTop = 132
Left = 252
Height = 27
Width = 24
Name = "oTypelib"

commandbutton
commandbuttoncmdSTK3wspub�AutoSize = .T.
Top = 124
Left = 88
Height = 23
Width = 76
FontName = "Tahoma"
FontSize = 8
Caption = "STK3 Wi\<zard"
TabIndex = 9
Name = "cmdSTK3"
�PROCEDURE Click
LOCAL lcValue, lcFile, loReg
loReg = NEWOBJECT("registry",HOME()+"ffc\registry.vcx")
lcValue=""
IF loReg.GetRegKey("",@lcValue,"CLSID\{3FEB0525-8310-44ab-9CCC-E0F49ED513B0}\InProcServer32",HKEY_CLASSES_ROOT)=0
	IF ATC("wsdlgen",lcValue)#0
		lcFile = JUSTPATH(lcValue)+"\wsdlgen3.exe"
		IF FILE(lcFile)
			RUN /n "&lcFile."
			THISFORM.Release()
		ENDIF
	ENDIF
ENDIF

ENDPROC
custom_typelibwstool.pf1.pgURIswstool.pf1.pgOptions
olecontrol
olecontrol
oleMethodswstool.pf1.pgMethodslabellabel-�� ��%�k +�U����%�������3�T����-��B��T����a��"T��CC����������-��	��C'
	��%�C4����T���
�������T���
�a���ULCIDTHISFORMLSTSERVICES	LISTCOUNTTHIS
CHKTOOLBOXENABLEDLIST	LISTINDEXUNIQUEIDVALUETOOLBOXt&�U
<��U_OWEBSERVICEMANAGER+���
��C���7��
T�����U
ORETOBJECT_OWEBSERVICEMANAGERTHIS	��C����C�����UTHISFORMLSTSERVICESINTERACTIVECHANGE
��C����UTHISFORMRELEASE	��C����C�����UTHISPARENTUPDATECONTROLSupdatecontrols,��
Deactivate\��Destroyh��Init���
updatelist���cmdOK.Click+��lstServices.InteractiveChangeR��1qqAA"Q�1�A3Q2q2q�q�2�2�3�2n�����Uv���"@&)�FontName = "Tahoma"
FontSize = 8
Value = http://tempuri.org/Proj1/action/
ControlSource = ""
Height = 22
InputMask = (REPLICATE("X",254))
Left = 35
TabIndex = 9
Top = 245
Width = 408
Name = "txtActionURI"
nTop = 64
Left = 12
Height = 164
Width = 396
BackStyle = 0
SpecialEffect = 0
Style = 3
Name = "Shape1"
Label1labellabelwstool.pf1.pgURIslblActionURI�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "\<WSDL Namespace URI:"
Height = 15
Left = 12
Top = 44
Width = 113
TabIndex = 2
Name = "lblWSDLURI"
wspublabelClassPixels_ws3.hwspub_ws3.h&����-labelCArial, 0, 9, 5, 15, 12, 32, 3, 0
Tahoma, 0, 8, 5, 13, 11, 21, 2, 0
wspickerPixelsClasscustomwspicker�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
FontUnderline = .F.
Caption = "Code output options"
Height = 15
Left = 20
Top = 184
Width = 100
TabIndex = 5
Style = 3
Name = "Label1"
wspickerLabel1labellabel�Top = 226
Left = 24
Height = 15
Width = 123
FontName = "Tahoma"
FontSize = 8
AutoSize = .T.
BackStyle = 0
Caption = "Include \<error handling"
Value = .T.
ControlSource = ""
TabIndex = 7
Name = "chkError"
wspickerchkErrorcheckboxcheckbox�Top = 202
Left = 24
Height = 17
Width = 100
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "Use \<Custom class"
Value = .T.
ControlSource = ""
TabIndex = 6
Name = "chkCustom"
wspicker	chkCustomcheckboxcheckbox�FontName = "Tahoma"
FontSize = 8
WordWrap = .T.
BackStyle = 0
Caption = ""
Height = 15
Left = 12
Top = 156
Width = 360
TabIndex = 4
Name = "lblURI"
wspickerlblURIlabellabel�Top = 260
Left = 11
Height = 15
Width = 211
FontName = "Tahoma"
FontSize = 8
AutoSize = .T.
BackStyle = 0
Caption = "\<Generate with UTF-16 Unicode encoding"
Value = .F.
ControlSource = ""
Enabled = .T.
TabIndex = 22
Name = "chkUnicode"
comboboxdPROCEDURE Click
DO (_wizard) WITH "","webservice",,"INTELLISENSE"
THISFORM.updatelist()
ENDPROC
�Top = 228
Left = 174
Height = 22
Width = 60
FontName = "Tahoma"
FontSize = 8
Caption = "\<New..."
TabIndex = 8
Name = "cmdNew"
wspickercmdNew
commandbutton
commandbutton#FontName = "Tahoma"
FontSize = 8
FontUnderline = .F.
BackStyle = 0
Caption = "View XML Web service description (WSDL)"
Height = 15
Left = 12
MousePointer = 15
MouseIcon = ..\
Top = 136
Width = 202
TabIndex = 3
ForeColor = 0,0,255
nvisitedforecolor = 16711680
Name = "lblWSDL"
wspickerlblWSDLlabel_hyperlink.vcx_hyperlinklabel?Top = 132
Left = 324
Height = 23
Width = 24
Name = "oWeb"
wspickercustom
_ws3utils.vcx_webservices�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
FontUnderline = .F.
BackStyle = 0
Caption = "Select an \<XML Web service:"
Height = 15
Left = 12
Top = 10
Width = 134
TabIndex = 1
Name = "lblMore"
wspickerlblMorelabellabel�PROCEDURE InteractiveChange
LOCAL lnPos,lcURL
lcURL = THIS.DisplayValue

* Look in existing virtual directories
lnPos = ASCAN(THISFORM.oWeb.aVirDirs,lcURL,-1,-1,-1,15)
IF lnPos#0
	THISFORM.pf1.pgOptions.txtWSDLFile.Value = THISFORM.oWeb.aVirDirs[m.lnPos,2]
	RETURN
ENDIF

* Look in other locations
lnPos = ASCAN(THISFORM.aURIs,lcURL,-1,-1,-1,15)
IF lnPos#0
	THISFORM.pf1.pgOptions.txtWSDLFile.Value = THISFORM.aURIs[m.lnPos,2]
ENDIF

ENDPROC
TTop = 47
Left = 11
Height = 197
Width = 276
Visible = .T.
Name = "oleMethods"
\PROCEDURE KeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl
IF nKeyCode=13
	THISFORM.cmdOK.Click()
ENDIF
ENDPROC
PROCEDURE InteractiveChange
LOCAL lcURI
IF THIS.ListCount=0
	RETURN
ENDIF
lcURI = ALLTRIM(THISFORM.lstServices.List(THISFORM.lstServices.ListIndex,3))
THISFORM.lblWSDL.cTarget = lcURI 
THISFORM.lblURI.Caption = lcURI
ENDPROC
�FontName = "Tahoma"
FontSize = 8
ColumnCount = 3
ColumnWidths = "400,0,0"
ControlSource = ""
Height = 118
Left = 12
TabIndex = 2
Top = 24
Width = 360
IntegralHeight = .T.
ItemTips = .T.
Name = "lstServices"
wspickerlstServiceslistboxlistbox�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Enabled = .T.
Height = 22
InputMask = (REPLICATE("N",64))
Left = 107
TabIndex = 2
Top = 51
Width = 312
Name = "txtName"

lblWSDLURI0PROCEDURE Click
THISFORM.Release()

ENDPROC
�Top = 228
Left = 312
Height = 22
Width = 60
FontName = "Tahoma"
FontSize = 8
Cancel = .T.
Caption = "Cancel"
TabIndex = 10
Name = "cmdCancel"
wspicker	cmdCancel
commandbutton
commandbuttonTop = 240
Left = 11
Height = 15
Width = 328
FontName = "Tahoma"
FontSize = 8
AutoSize = .T.
BackStyle = 0
Caption = "Automatically generate XML web service files during project \<build"
Value = .F.
ControlSource = ""
Enabled = .T.
TabIndex = 21
Name = "chkPHook"
�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "\<Service Name:"
Height = 15
Left = 11
Top = 55
Width = 71
TabIndex = 1
Name = "Label9"
label�PROCEDURE Click
THISFORM.cRetvalue = ALLTRIM(THISFORM.lstServices.List(THISFORM.lstServices.ListIndex, 2))
IF VARTYPE(THISFORM.oRetValue)="O"
	ADDPROPERTY(THISFORM.oRetValue,"cRetvalue",THISFORM.cRetvalue)
	ADDPROPERTY(THISFORM.oRetValue,"lUseCustom",THISFORM.chkCustom.Value)
	ADDPROPERTY(THISFORM.oRetValue,"lAddErrorCode",THISFORM.chkError.Value)
ENDIF
THISFORM.Release()

ENDPROC
�Top = 228
Left = 248
Height = 22
Width = 60
FontName = "Tahoma"
FontSize = 8
Caption = "OK"
Default = .T.
TabIndex = 9
Name = "cmdOK"
wspicker
commandbuttonLTop = 192
Left = 12
Height = 56
Width = 144
Style = 3
Name = "Shape1"
.OLEObject = C:\WINDOWS\System32\mscomctl.ocx
Xcretvalue Reserved.
oretvalue Reserved.
csavenotify Reserved.
*updatelist Reserved.
�PROCEDURE Click
LOCAL loConfig, i
PRIVATE lcURL, lcDefPath
lcURL=""
lcDefPath=""
loConfig = NEWOBJECT("wsconfig",THISFORM.ClassLibrary,"","lcURL","lcDefPath")
loConfig.lDefaultMode = .F.
loConfig.Show()
lcURL = ALLTRIM(lcURL)
IF EMPTY(lcURL)
	RETURN
ENDIF
lcURL = IIF(RIGHT(lcURL,1)="/", lcURL, lcURL+"/") 	
THISFORM.pf1.pgOptions.txtWSDLFile.Value = lcDefPath

* See if we already have this item registered.
FOR i = 1 TO THISFORM.pf1.pgOptions.cboWSDLFile.ListCount
	IF UPPER(THISFORM.pf1.pgOptions.cboWSDLFile.List[m.i])==UPPER(lcURL)
		THISFORM.pf1.pgOptions.cboWSDLFile.ListIndex=m.i
		RETURN
	ENDIF
ENDFOR

THISFORM.pf1.pgOptions.cboWSDLFile.AddItem(lcURL)
THISFORM.pf1.pgOptions.cboWSDLFile.DisplayValue = lcURL

IF !EMPTY(THISFORM.aURIs[1])
	DIMENSION THISFORM.aURIs[ALEN(THISFORM.aURIs,1)+1,2]
ENDIF

THISFORM.aURIs[ALEN(THISFORM.aURIs,1),1] = lcURL
THISFORM.aURIs[ALEN(THISFORM.aURIs,1),2] = lcDefPath

ENDPROC
�FontName = "Tahoma"
FontSize = 8
Caption = "\<COM Server:"
Height = 17
Left = 12
Top = 65
Width = 70
TabIndex = 3
Name = "Label2"
�PROCEDURE updatelist
LOCAL lcSaveArea
lcSaveArea = SELECT()

TRY
	IF THIS.oWeb.Checkwsdbf()
		THIS.lstServices.Clear()
		SCAN FOR UPPER(Type) = "C"
			THIS.lstServices.AddListItem(ALLTRIM(Class) + " (" + ALLTRIM(Name) + ")")
			THIS.lstServices.AddListItem(ALLTRIM(UniqueID), THIS.lstServices.NewItemId, 2)
			THIS.lstServices.AddListItem(ALLTRIM(URI), THIS.lstServices.NewItemId, 3)
		ENDSCAN
		IF THIS.lstServices.ListCount>0
			THIS.lstServices.ListIndex=1
			THIS.lstServices.InteractiveChange()
		ELSE
			THIS.lblWSDL.ctarget = ""
			THIS.lblURI.Caption = ""
		ENDIF
	ENDIF
CATCH
FINALLY
	SELECT (lcSaveArea)
ENDTRY

ENDPROC
PROCEDURE Destroy
IF THIS.cSaveNotify="ON"
	SET NOTIFY CURSOR ON
ENDIF

ENDPROC
PROCEDURE Init
LPARAMETERS oRetObject
IF VARTYPE(oRetObject)="O"
	THIS.oRetValue = oRetObject
ENDIF
THIS.cSaveNotify=SET("NOTIFY",1)
SET NOTIFY CURSOR OFF
THIS.updatelist()

ENDPROC
PROCEDURE Unload
RETURN THIS.cRetValue

ENDPROC
	DataSession = 2
Top = 48
Left = 101
Height = 258
Width = 384
Desktop = .T.
DoCreate = .T.
ShowTips = .T.
BorderStyle = 2
Caption = "Select"
MaxButton = .F.
WindowType = 1
AlwaysOnTop = .T.
cretvalue = 
oretvalue = 
csavenotify = 
Name = "wspicker"
�oref Reserved.
^auddi[1,0] Array of UDDI Web Services found.
*searchbusiness Method to search.
*cleanaccesspoint 
*searchservice 
*updateservicearray 
<AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
WordWrap = .T.
BackStyle = 0
Caption = 'Please specify the URIs to be used in the WSDL file for your XML web service. It is recommended that a domain other than "tempuri.org" be used.'
Height = 28
Left = 11
Top = 9
Width = 396
TabIndex = 1
Name = "Label1"
�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Enabled = .F.
Height = 22
Left = 84
Style = 2
TabIndex = 7
Top = 90
Width = 320
Name = "cboInterface"
�AutoSize = .F.
FontName = "Tahoma"
FontSize = 8
FontUnderline = .F.
BackStyle = 0
Caption = "\<Enter name to search for in UDDI database:"
Height = 15
Left = 12
Top = 10
Width = 241
TabIndex = 1
Name = "Label3"
�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
Caption = "Ne\<w Virtual Directory Name:"
Height = 15
Left = 24
Top = 167
Width = 137
TabIndex = 9
Name = "lblNew"
�PROCEDURE Click
LOCAL lcFile
lcFile = ALLTRIM(LOWER(GETFILE("DLL;TLB;EXE")))
IF !EMPTY(lcFile) AND FILE(lcFile)
	THISFORM.ProcessFile(lcFile)
ENDIF

ENDPROC
9AutoSize = .F.
FontName = "Tahoma"
FontSize = 8
WordWrap = .T.
BackStyle = 0
Caption = "Only select methods (operations) you would like to expose in the WSDL file.  Your Web service will only support the methods you choose."
Height = 30
Left = 11
Top = 9
Width = 408
TabIndex = 23
Name = "lblWSDLURI"
�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
Caption = "\<Select Class:"
Height = 15
Left = 12
Top = 95
Width = 63
TabIndex = 6
Name = "Label6"
�FontName = "Tahoma"
FontSize = 8
ControlSource = ""
Height = 22
Left = 84
Style = 2
TabIndex = 4
Top = 60
Width = 320
ItemTips = .T.
Name = "cboCOMFile"
�AutoSize = .T.
FontName = "Tahoma"
FontSize = 8
BackStyle = 0
Caption = "\<Base SOAP Action URI (will have method name appended):"
Height = 15
Left = 12
Top = 224
Width = 284
TabIndex = 8
Name = "lblActionURI"
�AutoSize = .T.
ButtonCount = 2
BackStyle = 0
BorderStyle = 0
Value = 1
ControlSource = ""
Height = 27
Left = 87
Top = 165
Width = 104
TabIndex = 13
Name = "opgListener"
Option1.FontName = "Tahoma"
Option1.FontSize = 8
Option1.BackStyle = 0
Option1.Caption = "\<ISAPI"
Option1.Value = 1
Option1.ControlSource = ""
Option1.Height = 17
Option1.Left = 5
Option1.Style = 0
Option1.Top = 5
Option1.Width = 45
Option1.AutoSize = .F.
Option1.Name = "Option1"
Option2.FontName = "Tahoma"
Option2.FontSize = 8
Option2.BackStyle = 0
Option2.Caption = "\<ASP"
Option2.ControlSource = ""
Option2.Height = 17
Option2.Left = 54
Option2.Style = 0
Option2.Top = 5
Option2.Width = 45
Option2.AutoSize = .F.
Option2.Name = "Option2"
�� ��%����U�T����������T����������T����������T����������(%����	������	����T���	�����(%����	������	����T���	�����U
THISCMDEDITENABLED
LSTOPERATIONS	LISTCOUNTCMDEDIT2
LSTCLIENTSCMDDELCMDDEL2	LISTINDEXpgMethods.Activate,��1�����1A�1A2�)�AutoSize = .F.
ButtonCount = 2
Value = 1
ControlSource = ""
Height = 126
Left = 12
Top = 72
Width = 516
TabIndex = 3
Name = "opgDefaultVD"
Option1.FontName = "Tahoma"
Option1.FontSize = 8
Option1.Caption = "\<Existing"
Option1.Value = 1
Option1.ControlSource = ""
Option1.Height = 17
Option1.Left = 7
Option1.Style = 0
Option1.Top = 7
Option1.Width = 61
Option1.AutoSize = .F.
Option1.Name = "Option1"
Option2.FontName = "Tahoma"
Option2.FontSize = 8
Option2.Caption = "\<New"
Option2.ControlSource = ""
Option2.Height = 17
Option2.Left = 76
Option2.Style = 0
Option2.Top = 7
Option2.Width = 61
Option2.AutoSize = .F.
Option2.Name = "Option2"
�cproxyclass Class library for proxy handler.
cproxyclasslib Class library for proxy handler.
cproxyvar Variable to use for SOAP object reference generated.
lcustomclientcode Whether to use custom client code or default.
lhaderror Had an error.
lskiperror Whether to skip error.
cwsname Name of Web service.
cgenwsdl Name of WSDL reference.
cgenwsml Name of WSML reference.
cgenservice Name of SOAP service.
cgenport Name of SOAP port.
cgenparms Parameters for Web service init call.
cproxyclassinit Name of init method to call on Proxy class.
laddfoxcodeheader Whether to add IntelliSense header -- needed for IntelliSense.
cgenvar Name of variable reference to Proxy object.
lincludewsml For use with only SOAP Toolkit XML Web services that use custom type mappers.
ladderrorcode Whether to add error handling to SOAP call.
*getproxycode Method to get SOAP proxy code.
*erroralert Displays error message.
*about About this class.
*defaultsoapcode Outputs default code making direct calls to SOAP Toolkit APIs.
*defaultclasscode Outputs default code making calls wrapper classes or the SOAP Toolkit APIs.
*genproxycode Generates proxy code.
�� ���f%�#kM
�U������
T�����%�C���
��G�T�����-��T���	��-��T��
��-��T����-���T���
�ٹSince IIS is not installed on this machine, you will only have the option to select an existing web server location on another machine. If you select Cancel, you will be prompted later.���%�C����
����T��C�����������(������#��CC�
������������T����C������!T����C����������C�Uri������#%�CC���
�C�*���	����T���CC��C�
 ���T���CC��C�
 ��� %�C�������������C��������T��������T���������UI	LNVIRDIRSLCVALUETHISOWEB
GETVIRDIRSOPGDEFAULTVDOPTION1ENABLEDOPTION2LBLNEWLBLPATHLBLDESCCAPTIONAVIRDIRS	CBOVIRDIRADDITEMDISPLAYVALUELISTITEMTXTPATHVALUEGETPREFSCDEFURICDEFPATH���������T��C������%���	����K�T����
���%�C����|�T����
����R%�C���CC���R�/�-C�http://����C�https://���	��G�n��C�bDirectory, name or path is missing or bad. Make sure name starts with "http://" and ends with "/".�x��B�-������T��C��
����T����
�C��
����!%�C���C���C�����n��C�bDirectory, name or path is missing or bad. Make sure name starts with "http://" and ends with "/".�x��B�-���T����
��� T��CC�C�//���굛��0T��CC��R�/�C�C�>�=��6��1T��CC�/������C�C�/���6��-T���IIS://LocalHost/w3svc/1/Root���!%�C������
����{��C�oError creating new virtual directory. Check to see that IIS is working properly or name does not already exist.�x��B�-���%�CC���R�/����T����/����%�C���
���T������!STORE lcVirDir TO &lcVarName.
�%�C���
��F�T������STORE lcPath TO &lcVarName.
�%����
�������'%�C�URI�C�
 ��������FR,�����6A default web service location was successfully set...����ULCVIRDIRLCNAMELCPATH	LCVARNAMELCPARENTLCCHILDTHISFORMTXTPATHVALUEOPGDEFAULTVD	CBOVIRDIRDISPLAYVALUETEXTTXTNEWVIRDIROWEBCREATEVIRDIRTHISCURLLOCATIONCURLPATHLDEFAULTMODE
CHKDEFAULTUPDATEPREFSm����%�C����C��0�T�������%�C����C��Y�T�������
��C����UTCURIVARREFTCPATHVARREFTHISCURLLOCATIONCURLPATHSETUP����%�����Q�:T�����'Select Default XML Web Service Location�����2T�����Select XML Web Service Location���T������
��UNSTYLETHISLDEFAULTMODELBLTYPECAPTION
CHKDEFAULTVISIBLE �����T��C������!%�C���
����	��f�T������	��T��-�����"�����(�C��
������%%�CC�
����
�fC�f����#T����C�
����
���T��a��!�����*T���
�C�����a��
6��ULCVDIRILFOUNDTHIS	CBOVIRDIRDISPLAYVALUECDEFURITXTPATHVALUECDEFPATHOWEBAVIRDIRS	CMDGETDIRENABLEDSTYLEsetup,��
getwslocation���Init�	��Showf
��RefreshV��1��SAA�Ac�q1A�A�2��aAaaA3�Qq1�1A"�qA�Q��qA2��qA�!AA3A3�A�raAA3�QAQA�3q��!Aq3�Ra��!Q1�AAAA�2��L)Jg&cSA�n[
�x)��� ��	E%�S)�U�������T��C������%�C����L�T��C�������
H�]����C������U��C�BYou must enter a WSDL file name for generation option(s) selected.���	��B�-���C� �����u����C�|The WSDL location contains a space which is not currently supported in URLs by the Visual FoxPro XML Web Service extensions.���	��B�-��2���8R,:��-Attempting to connect to XML Web service.....��T��C�a���
��R�%��
��-��T���Error generating ٯIntelliSense scripts. Check for a valid WSDL URL location or invalid WSDL content. The WSDL file may have also been in use -- try regenerating the XML Web Service files again.��
�������C���z��%�CC���x������-T���C�
 C�
 C�
 C�
 C�������C����	���w�B��C�6Finished generating IntelliSense scripts successfully.�x���	B�����ULCWSDLLSUCCESSLAWSERRSLCERRMESSAGETHISFORMCBOWSDLTEXTDISPLAYVALUEOWEBALERT
ADDFOXCODEv���%�C�TIPS������Q�%�CC���
��M���CC���������%������o�B�-���ULCDEFURITHISOWEBGETPREFSCBOWSDLADDITEM	LHADERROR
regwebservice,��Init%��12S�QA��Qqq�q���Q�
����AA�!A�A3q�!QAA2qA2-H&%)�/�� l�%�m�#�UC�������%�C�f�C���T��C����%�C��., �___����i�T����loWS�����T����lo����T���C����T���C�	���T��
�C����T���C�
���%�C���
����T���a���T���a��T��a����(��!���B�C��
C����6��ULSUCCESSLCCLASSTYPECLASSTHISCGENVARCGENSERVICENAMECGENPORTPORTCGENWSDLURICGENWSMLWSMLLINCLUDEWSMLLADDFOXCODEHEADERLOEXCEPTIONGENPROXYCODE�����C��x��U	TCMESSAGEU�����
T�����T���~��%�������KT����LOCAL ��� AS "�XML Web Service�"C�
 C�
 ��QT����* LOCAL ��� AS "�MSSOAP.SoapClient30�"C�
 C�
 ��
T������%���
����M(�`�����l�f	* Do not remove or alter following line. It is used to support IntelliSense for your XML Web service.�e�_	*__VFPWSDef__: <<THIS.cGenVar>> = <<THIS.cGenWSDL>> , <<THIS.cGenService>> , <<THIS.cGenPort>>�#�	LOCAL loException,lcErrorMsg�=�7	<<THIS.cGenVar>> = CREATEOBJECT("MSSOAP.SoapClient30")�6�0	<<THIS.cGenVar>>.MSSoapInit(<<THIS.cGenParms>>)�S�M	* Call your XML Web service here. ex: leResult=<<THIS.cGenVar>>.SomeMethod()��	<<lcPosMarker>>��	B�����M(�`��k�e* Do not remove or alter following line. It is used to support IntelliSense for your XML Web service.�d�^*__VFPWSDef__: <<THIS.cGenVar>> = <<THIS.cGenWSDL>> , <<THIS.cGenService>> , <<THIS.cGenPort>>�"�LOCAL loException,lcErrorMsg�	�TRY�=�7	<<THIS.cGenVar>> = CREATEOBJECT("MSSOAP.SoapClient30")�6�0	<<THIS.cGenVar>>.MSSoapInit(<<THIS.cGenParms>>)�S�M	* Call your XML Web service here. ex: leResult=<<THIS.cGenVar>>.SomeMethod()��	<<lcPosMarker>>��CATCH TO loException�T�N	lcErrorMsg="Error: "+TRANSFORM(loException.Errorno)+" - "+loException.Message��	DO CASE�)�#	CASE VARTYPE(<<THIS.cGenVar>>)#"O"�5�/		* Handle SOAP error connecting to web service�.�(	CASE !EMPTY(<<THIS.cGenVar>>.FaultCode)�=�7		lcErrorMsg=lcErrorMsg+CHR(13)+<<THIS.cGenVar>>.Detail�*�$		* Handle SOAP error calling method��
	OTHERWISE��		* Handle other error��	ENDCASE�#�	* Use for debugging purposes��	MESSAGEBOX(lcErrorMsg)�
�FINALLY��ENDTRY��	B����ULCSTRLCPOSMARKERTHISLADDFOXCODEHEADERCGENVAR
LADDERRORCODEi��������,T��CC�����	WSHandler���6��`T��CC����9�3IIF(VERSION(2)=0,"",HOME()+"FFC\")+"_ws3client.vcx"��[���]6��.T��CC��	���SetupClient���	6��.T��CC��
���loWSHandler���
6��
T�����T���~��%�������KT����LOCAL ��� AS "�XML Web Service�"C�
 C�
 ��QT����* LOCAL ��� AS "�MSSOAP.SoapClient30�"C�
 C�
 ��
T������%���

��"�M(�`�����l�f	* Do not remove or alter following line. It is used to support IntelliSense for your XML Web service.�e�_	*__VFPWSDef__: <<THIS.cGenVar>> = <<THIS.cGenWSDL>> , <<THIS.cGenService>> , <<THIS.cGenPort>>�9�3	LOCAL loException, lcErrorMsg, <<lcProxyClassVar>>�N�H	<<lcProxyClassVar>> = NEWOBJECT("<<lcProxyClass>>",<<lcProxyClasslib>>)�V�P	<<THIS.cGenVar>> = <<lcProxyClassVar>>.<<lcProxyClassInit>>(<<THIS.cGenParms>>)�T�N	* Call your XML Web service here.  ex: leResult=<<THIS.cGenVar>>.SomeMethod()��	<<lcPosMarker>>��	B�����M(�`��k�e* Do not remove or alter following line. It is used to support IntelliSense for your XML Web service.�d�^*__VFPWSDef__: <<THIS.cGenVar>> = <<THIS.cGenWSDL>> , <<THIS.cGenService>> , <<THIS.cGenPort>>�8�2LOCAL loException, lcErrorMsg, <<lcProxyClassVar>>�	�TRY�N�H	<<lcProxyClassVar>> = NEWOBJECT("<<lcProxyClass>>",<<lcProxyClasslib>>)�V�P	<<THIS.cGenVar>> = <<lcProxyClassVar>>.<<lcProxyClassInit>>(<<THIS.cGenParms>>)�V�P	* Call your XML Web service here.  ex: leResult = <<THIS.cGenVar>>.SomeMethod()��	<<lcPosMarker>>��CATCH TO loException�T�N	lcErrorMsg="Error: "+TRANSFORM(loException.Errorno)+" - "+loException.Message��	DO CASE�)�#	CASE VARTYPE(<<THIS.cGenVar>>)#"O"�5�/		* Handle SOAP error connecting to web service�.�(	CASE !EMPTY(<<THIS.cGenVar>>.FaultCode)�*�$		* Handle SOAP error calling method�=�7		lcErrorMsg=lcErrorMsg+CHR(13)+<<THIS.cGenVar>>.Detail��
	OTHERWISE��		* Handle other error��	ENDCASE�#�	* Use for debugging purposes��	MESSAGEBOX(lcErrorMsg)�
�FINALLY��ENDTRY����	B����ULCPROXYCLASSLCPROXYCLASSLIBLCPROXYCLASSVARLCPROXYCLASSINITLCSTRLCPOSMARKERTHISCPROXYCLASSCPROXYCLASSLIBCPROXYCLASSINIT	CPROXYVARLADDFOXCODEHEADERCGENVAR
LADDERRORCODEE$%�C�����C�	C�����-�	B�����&%�C�����C�CC������y�T����loWS��T���a���%�C�����C����T�������%�C�����C����T�������@%���
�C�����C�C�
.asmx?wsdl������%�T�������
H�6��*�C����	C���	�	C���	��}�T����"���"���C�������;T����"���", "���", "���"��2��JT����"���", "���", "���", "���"���"B�C��	�
C��
�C��6��UTHISCGENWSDLCGENVARLADDFOXCODEHEADERCGENSERVICECGENPORTLINCLUDEWSMLCGENWSML	CGENPARMSLCUSTOMCLIENTCODEDEFAULTCLASSCODEDEFAULTSOAPCODE���������T���a��%�����8�B��T��CE��%�������QT���� �;Make sure your FOXWS3.DBF web services table is not opened.�����C�����UNERRORCMETHODNLINE	LCMESSAGETHIS	LHADERROR
LSKIPERROR
ERRORALERTgetproxycode,��
erroralert ��aboutE��defaultsoapcodeL��defaultclasscoden	��genproxycode���Error���1��A��A�aA!!!!1�A��A�B�2q�35�����A�Q1�a1aA�A��A!��a1a�A��Q�����1���A�2��������A�Q��aAaA�A��A���aaa�A��Q�����1���aA�3G�AaA�A�A�AA���!���A#2�q�AA�A2�M$i�){.K�hd���'�)KPROCEDURE updatecontrols
LOCAL lcID
IF THISFORM.lstServices.ListCount=0
	THIS.chkToolbox.Enabled = .F.
	RETURN
ENDIF
THIS.chkToolbox.Enabled = .T.

lcID = ALLTRIM(THISFORM.lstServices.List(THISFORM.lstServices.ListIndex, 2))
LOCATE FOR UniqueID = lcID AND !DELETED()
IF FOUND()
	THIS.chkToolbox.Value = Toolbox
ELSE
	THIS.chkToolbox.Value = .T.
ENDIF

ENDPROC
PROCEDURE Deactivate
ACTIVATE SCREEN
ENDPROC
PROCEDURE Destroy
RELEASE _oWebServiceManager
ENDPROC
PROCEDURE Init
LPARAMETERS oRetObject
DODEFAULT(oRetObject)
PUBLIC _oWebServiceManager
_oWebServiceManager=THIS
ENDPROC
PROCEDURE updatelist
DODEFAULT()
THISFORM.lstServices.InteractiveChange()
ENDPROC
PROCEDURE cmdOK.Click
THISFORM.Release()

ENDPROC
PROCEDURE lstServices.InteractiveChange
DODEFAULT()
THIS.Parent.UpdateControls()

ENDPROC

��ࡱ�>��	������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Root Entry���������WmN��OleObjectData�����AccessObjSiteData&������������\ChangedProps�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������K�ѽ����j��(6(!C4�\N}�#.��ͫ\$89368265E-85FE-11d1-8BE3-0000F8754DA16-00C04FB6678B} C:�HideColumnHeadersL
LabelEdit	I

\'�����Q(R�������K�Q�DBTahoma �Methods:\MousePointer	I
View	I
CheckboxesLW�� >>�&%;��m�U������������'����	�
���
���������������/%�C�t�
�C����C�C����C����B��T������T��������C�����F������%�CC���J�R��C�FCould not access Web service table FOXWS3. Make sure it is not in use.�x��B��-�����
%�C4
��m�B��T��C����T��� �C�!���
�������C���"aC�
 C�
 ���(T�
�C���(�������������%��
�����B��T��C�
���T��#�$������C��#�%��T��&� ����T��'�(�C�)���%�C�.ASMX�)������T��*�+�a��T��*�,�a��1T��*�(�C��'�(�C�?��'�(��\���
T�����%���#�-���S�0T�
�C�wsParmsC�Q�FFC\_ws3client.vcx���T�
�.���#��
��C�
�/����C��
�0���
T�����%���#�-���������#�-�������(���#�-����T���
������
T�������#�"T���
���C�
���#�1��,T��CC�
���#�2�3��@��6���(��/���*T�����laParms[C�
�_�]��%��
���#�-
����T����,������T����(��)������JT��C�	WSHandlerCC�h����C�Q�FFC\6�_ws3client.vcx���%�CC�4����2� T�5�CC�)�C�!�C�7���6���_�%T�5�CC�)�C�!�C�7�C�4���6���"leRetVal = loWSfox1.&lcMethod.
�(����T�	�a��+T���Error: C��8_� - ��9��
H������C�5���O��K�%�C��:�
��G�KT���Call to the Web service failed:C�
 C�
 C�
 C�
 ��;����C�5�<�
��x�T���C�
 �5�=��2������T��>����%��	
��2������(���#�-��.���"�%�C�
���#�2�3���6���#�2��
���?��ReturnValue��C�
�������*������
H�C�l�
��	��]�
T������C����C����T��C����%�C��=�<����T��CC��	꾛����C����O����T��C�_��#�C�leRetVal.lengthb�N��%
�T���MB_NODISPLAY_LOC��%���@���!
�0T��C�	IsDataSetCC���2�A�	꾸���
%����o	�T��B�a��M(�`�����/�)			<?xml version="1.0" encoding="utf-8"?>�.�(			<DataSet xmlns="http://tempuri.org/">�5�/			<<ALLTRIM(STRCONV(leRetval.item(0).xml,9))>>�5�/			<<ALLTRIM(STRCONV(leRetval.item(1).xml,9))>>��
			</DataSet>��
T������
�T��C���2�C��%�C����O���	�T��C���2�D��T����A���
�3T���&<?xml version="1.0" encoding="utf-8"?>��T�����A�����2�l�
T�����G` �G`(����Object Members����
�����T��C�����b��
T�E���������(����\�%��EC�
������
�.����<<laPEMs[m.i, 1]>>:���9�0lcValue = TRANSFORM(leRetVal.&laPEMs[m.i,1])
�� <<lcValue>>���A���T�E�C�
�������G`(�G`��$T��CCC�C�	 ���=��<��T��F�+��
��T��G�+������z�
%����J�G.�T��C�Q�__testws.xml����C�������C���G�H�I��T��J����T��B����T��K�,�a���v�T��F�L����T��K�+�-����(�M�����UNTCSERVICEIDTCMETHODLOEXCEPTION
LCERRORMSGLOWSHANDLERLCSYNTAXLAPARMSLCMETHODLCPARMS	LHADERRORLNPOSLATIPSLERETVAL
LOPARMFORMILCBYREFCHARLHASDATASET	LCTEMPSTRLHASHTML	LCTMPFILELCRETVALLNCOUNTLAPEMSLONODETHIS
CSERVICEIDCMETHODOWEB
CHECKWSDBFCWSALIASUNIQUEIDLBLWSCAPTIONNAMETIPSCOLPARMSWSSYNTAXGENPARMS	LBLMETHODLBLWSDLCTARGETURI
LBLWEBTESTVISIBLEENABLEDCOUNT	OCOLPARMSSETUPWSSHOWGETPARMITEMISBYREFWSMLLOWSFOX1SETUPCLIENTPORTERRORNOMESSAGESOAPERRORSTRINGSOAPERRORDETAIL	FAULTCODEDETAILRETURNVALUEADDPROPERTYLENGTHXMLLDATASET
PARENTNODE
OWNERDOCUMENT	LCLASTPEM
EDTRESULTS
OLEBROWSEROBJECT	NAVIGATE2XMLFILE	LBLBROWSEVALUELOERROR9%%�C�����C�
C���
	��2�
<������UTHISCFORMREF��C�����UTHIS_RESIZABLE1ADJUSTCONTROLSsetupws,��Destroy���Resize��1�rqq��AA�!AA��AA�Q���AA!32Q�A�r1�A�q2�Q��!��A��!AAA����QA!����Q2�A1��BA����aA�AAA���R�qQAR�2�A����QQ1A��qQq�1AAAA��q�Qq���q�AA��1�AqAaaBCA1��a��q�1A�A3Q�A21���
��'H�)>4PROCEDURE updatesets
LOCAL lcURI
IF VARTYPE(THIS.oWebParm) = "O"
	WITH THIS.oWebParm
		.cService = ALLTRIM(THIS.pf1.pgOptions.txtName.Value)
		lcURI = ALLTRIM(THIS.pf1.pgOptions.cboWSDLFile.DisplayValue) 
		lcURI = IIF(RIGHT(lcURI,1)="/", lcURI, lcURI+"/") 	
		.cWSDLListener = lcURI + .cService + ".wsdl"
		.cASPListener = lcURI + .cService + ".asp"
		.cWSDLfile = ADDBS(ALLTRIM(THIS.pf1.pgOptions.txtWSDLFile.Value)) + .cService + ".wsdl"
		.cASPfile = ADDBS(ALLTRIM(THIS.pf1.pgOptions.txtWSDLFile.Value)) + .cService + ".asp"
		.cAppName = ALLTRIM(THIS.pf1.pgOptions.txtAppName.Value) 
		.lUseIsapi = (THIS.pf1.pgOptions.opgListener.Value=1)
		.lUseJScript = (THIS.pf1.pgOptions.opgScript.Value=2)
		.lUnicode = THIS.pf1.pgOptions.chkUnicode.Value
		IF THIS.pf1.pgOptions.chkPHook.Enabled AND THIS.pf1.pgOptions.chkPHook.Value#.lUsePHook
			.lUsePHook = THIS.pf1.pgOptions.chkPHook.Value
			.lChangePHook = .T.
		ENDIF
		.cURI1 = ALLTRIM(THIS.pf1.pguRIs.txtWSDLURI.Value)
		.cURI2 = ALLTRIM(THIS.pf1.pguRIs.txtSchemaURI.Value)
		.cURI3 = ALLTRIM(THIS.pf1.pguRIs.txtMessageURI.Value)
		.cURI4 = ALLTRIM(THIS.pf1.pguRIs.txtActionURI.Value)
		
		DIMENSION .aMethods[1]
		.aMethods[1]=""
		FOR EACH oItem IN THIS.pf1.pgmethods.olemethods.ListItems
			IF oItem.Checked
				IF !EMPTY(.aMethods[1])
					DIMENSION .aMethods[ALEN(.aMethods)+1]
				ENDIF
				.aMethods[ALEN(.aMethods)] = oItem.Key
			ENDIF
		ENDFOR	

		.SavePrefs()
	ENDWITH
ENDIF
ENDPROC
PROCEDURE checkpaths
IF ATC(" ",JUSTSTEM(ALLTRIM(THIS.pf1.pgOptions.txtWSDLFile.Value)))#0 OR;
	ATC(" ",JUSTSTEM(ALLTRIM(THIS.pf1.pgOptions.cboWSDLFile.DisplayValue)))#0	
	MESSAGEBOX(MB_URLWITHSPACE_LOC)
	RETURN .F.
ENDIF

ENDPROC
PROCEDURE Init
LPARAMETERS oWebRef

* restore settings
LOCAL i, lcWSDLFile, lcURI, lFound, lcFileLoc, loItem, lnCount
DIMENSION THIS.aURIs[1,2]
STORE "" TO lcWSDLFile
IF VARTYPE(oWebRef) = "O"
	THIS.Left = oWebRef.Parent.Left + 10
	THIS.Top = oWebRef.Parent.Top + 10

	THIS.oWebParm = oWebRef
	
	WITH oWebRef
		THIS.lblCOMFile.Caption = .cCOMFile + " (" + .cClass + ")"
		lcWSDLFile = JUSTFNAME(.cWSDLfile)
		lcURI = JUSTPATH(.cWSDLListener)
		lcURI = IIF(RIGHT(lcURI,1)="/", lcURI, lcURI+"/")
		lcFileLoc = JUSTPATH(.cWSDLfile)
		
		* Main options
		THIS.pf1.pgOptions.txtName.Value = JUSTSTEM(.cWSDLfile)
		THIS.pf1.pgOptions.txtWSDLFile.Value = ADDBS(JUSTPATH(.cWSDLfile))
		THIS.pf1.pgOptions.cboWSDLFile.AddItem(lcURI)
		THIS.pf1.pgOptions.cboWSDLFile.DisplayValue = lcURI 
		
		THIS.pf1.pgOptions.opgListener.Value = IIF(.lUseIsapi,1,2)
		THIS.pf1.pgOptions.txtAppName.Value = .cAppName
		THIS.pf1.pgOptions.chkPHook.Enabled = !EMPTY(.cProject)
		THIS.pf1.pgOptions.chkPHook.Value = .lUsePHook
		THIS.pf1.pgOptions.chkUnicode.Value = .lUnicode
		THIS.pf1.pgOptions.opgScript.Value  = IIF(.lUseJScript,2,1)

		* Namespace options	
		THIS.pf1.pguRIs.txtWSDLURI.Value    = .cURI1
		THIS.pf1.pguRIs.txtSchemaURI.Value  = .cURI2
		THIS.pf1.pguRIs.txtMessageURI.Value = .cURI3
		THIS.pf1.pguRIs.txtActionURI.Value  = .cURI4

		* Method options	
		LOCAL laMethods, lnCount
		DIMENSION laMethods[1]
		lnCount = 0
		THIS.oTypelib.cTypelib = .cCOMFile
		lnCount = THIS.oTypelib.GetMethods(@laMethods, .cClass, .F., .F., .T.)
		
		* Popupate the control here
		IF lnCount > 0
			* Add all options here
			FOR i = 1 TO lnCount
				THIS.pf1.pgmethods.olemethods.ListItems.Add(m.i,laMethods[m.i,1],laMethods[m.i,1])
			ENDFOR
		ENDIF
		
		
		IF !EMPTY(.aMethods[1])
			FOR i = 1 TO ALEN(.aMethods)
				TRY
					* Need to handle change in typelib where methods added or removed
					loItem = THIS.pf1.pgmethods.olemethods.ListItems.Item(.aMethods[m.i])
					loItem.Checked= .T.
				CATCH
				ENDTRY
			ENDFOR
		ELSE
			FOR i = 1 TO THIS.pf1.pgmethods.olemethods.ListItems.Count
				loItem = THIS.pf1.pgmethods.olemethods.ListItems.Item(m.i)
				loItem.Checked=.T.
			ENDFOR	
		ENDIF
	ENDWITH
ENDIF

* Add local virtual dirs
THIS.oWeb.GetVirDirs()
IF !EMPTY(THIS.oWeb.aVirDirs)
	FOR i = 1 TO ALEN(THIS.oWeb.aVirDirs,1)
		IF UPPER(THIS.oWeb.aVirDirs[m.i,1]) == UPPER(lcURI)
			lFound=.T.
			LOOP
		ENDIF
		THIS.pf1.pgOptions.cboWSDLFile.AddItem(THIS.oWeb.aVirDirs[m.i, 1])
	ENDFOR
ENDIF

* If location not found, let's add it.
IF !lFound
	DIMENSION THIS.aURIs[1,2]
	THIS.aURIs[1,1] = lcURI
	THIS.aURIs[1,2]	= lcFileLoc
ENDIF

ENDPROC
PROCEDURE Refresh
THIS.pf1.pgOptions.txtAppName.Enabled = (THIS.pf1.pgOptions.opgListener.Value#1)
THIS.pf1.pgOptions.opgScript.SetAll("Enabled",(THIS.pf1.pgOptions.opgListener.Value#1),"OptionButton")

ENDPROC
��� ���%�W���U����%�C����C�C���������JT��C�)Enter name to seach for in UDDI database:�UDDI Search���%�C������B��
T��������Q�UDDIEnv.Envelope���Q�UDDI10.find_business�!��Q�UDDIEnv.RequestManager���Q�UDDI10.businessList������	���
���
���J���(����	�
�&T��C�UDDIEnv.RequestManager�N��%�C����O����B�� T��C�UDDIEnv.Envelope�N��$T��C�UDDI10.find_business�N��#T��C�UDDI10.businessList�N��T������T������T����d��T��C�����%�C����O��j�B��T�������������T����������T��C�����������
T��������������T������ T�
�C�UDDIEnv.Envelope�N��(T��C�UDDI10.get_serviceDetail�N��T�
�����T��������T��C�
����
T�����%��������.��$T��C�UDDI10.serviceDetail�N��T���������!T�	�C�C�����������
T�	�����������������T�
������/%�C�WSDL�
���C�.ASMX�
������!����/%�C�WSDL�
���C�.ASMX�
������T�
�C�
� �!���!��C����	�
� �"������U#	TCBIZNAMELCNAMELOENVLOFINDLOREQ	LOBIZLIST	LCBIZNAME	LCBIZDESC	LCSVCNAME	LCSVCDESC
LCACCESSPOINTLOINFOLOENV2LOENV3LOENV4LOSVCDETPLUGINNAMEMAXROWSUDDIREQUEST
BUSINESSINFOSDESCRIPTIONITEMLOSVCSERVICEINFOS
ADDSERVICEKEY
SERVICEKEY	UDDIERRNOBUSINESSSERVICELOBINDBINDINGTEMPLATESACCESSPOINTTHISCLEANACCESSPOINTUPDATESERVICEARRAY���������
T�����
H�0�\��C�,������������(�C��,����T��C��
��,��/%�C�WSDL����C�.ASMX�������
T�����!�����C�;�����\������(�C��;��X�T��C��
��;��/%�C�WSDL����C�.ASMX�����T�
T�����!�����/%�C�.ASMX����C�WSDL���	����)T��C�C�.ASMX��=�	ASMX?WSDL���T��C����	B����U
TCACCESSPOINT
LCACCESSPOINTILCTMPSTR����%�C����C�C���������JT��C�)Enter name to seach for in UDDI database:�UDDI Search���%�C������B��
T������!��Q�UDDIEnv.RequestManager���Q�UDDIEnv.Envelope���Q�UDDI10.find_service���Q�UDDI10.serviceList��������	�
���
�J���(����&T��C�UDDIEnv.RequestManager�N��%�C����O����B�� T��C�UDDIEnv.Envelope�N��#T��C�UDDI10.find_service�N��"T��C�UDDI10.serviceList�N��T������T������T����d��T�
�C�����%�C�
���O��V�B��T�
�������	���~�T���	��� T��C�UDDIEnv.Envelope�N��(T�
�C�UDDI10.get_serviceDetail�N��T����
��T�
����	���T��C�����
T�
����%������4�.��$T�
�C�UDDI10.serviceDetail�N��T����
������!T��C�C��
����������
T����������
�������T�������/%�C�WSDL����C�.ASMX������!����/%�C�WSDL����C�.ASMX�����[�T��C��������C�����������U	TCBIZNAMELCNAMELOREQLOENVLOFIND	LOSERLIST	LCSVCNAME	LCSVCDESC
LCACCESSPOINTLOINFOLOENV2LOENV3LOENV4LOSVCDETPLUGINNAMEMAXROWSUDDIREQUESTSERVICEINFOS
ADDSERVICEKEY
SERVICEKEY	UDDIERRNOBUSINESSSERVICEDESCRIPTIONITEMLOBINDBINDINGTEMPLATESACCESSPOINTTHISCLEANACCESSPOINTUPDATESERVICEARRAYn�������(%�C���������������C�B��%�C���
��s�����������%�CC�����
����"���C����������$T���C�����������$T���C�����������$T���C�����������$T���C�����������$T���C�����������U	TCBIZNAME	TCBIZDESC	TCSVCNAME	TCSVCDESC
TCACCESSPOINTTHISFORMAUDDITHIS�����B�UNERRORCMETHODNLINEsearchbusiness,��cleanaccesspoint���
searchservice���updateservicearray���ErrorO��1q�q��AA�A���2��bQAAA1QQAA"����A"�aQ�BAAB���A�1�AAA�RABB2q���q����AAAq����AAAA��A��3q�q��AA�A�����QbQAA1!QRAA"�aQ�AAAB���A�1�AAA�RA�B2q�AAbaA�!ABAAAA3�A1�F�,[aP�~�!*��Fp�)�
}�� d
d
W�%_����U����������������	�
�����
�����
�����T��C��]��%�C����O����%%�C����N�
C����
����B��
T�	����T��C��]��T��C������C���	�`��T��C����
H�	�����	���R�T�
�����%�C����`���G�B��%�C�.VCXC������9�T��C����+�a��0�F%�C��f�FORM�C�loControl.DEClassb�C	�
C���
	����T������T������!��$%�C�loControl.Parentb�O���!��T�������%�C����G�B����-�T��a���%�CكIn order to view the DataEnvironement of a Form class, the builder first needs to instantiate the class. Would you like to do this?�$�x���)�T�
��C�����T���
���T��-�����5����
%����N�B����	���s�T�
�����)��	��C�.TMPC����	����P��C�DYou must first save form in order to properly read in control names.�x��B�-��)��	��C�.VCXC����	��2�
T�
����+�a���
H�B�
�'�C�
�f�FORM�
C�
��
	��z�
T���
��!�@�C�loTmpObject.Parentb�O�C�
��f�FORMSET	����%�C�
���
����
T���
���!�2�
�
T���
��T�
�������T�
�����T�
�����2���+�a����8%�C��f�FORM�C�loControl.Parentb�O����!����T��������T�
�����T�
�������%�C����C���%T��C������
�����,� T��C������
�����T��C�����b�������(������;IF UPPER(loControl.&laObjs[m.i]..Class)="WSHANDLER"���.��4THIS.GetControls(loControl.&laObjs[m.i]., lcKey)
��U	LOCONTROLLCPARENTKEYLAPARENTLAOBJSILNOBJSLCKEY	LHADERROR
LOTREEVIEWOBJLNPARENTLOTMPOBJECTLCDECLASSLIB	LCDECLASSTHISDEKEY	BASECLASSDECLASSDECLASSLIBRARYPARENTODATAENVCLASSLIBRARY
OCONTAINER	PARENTKEYNODESADDNAME�������
T�����+�a��n�/%�C�loParent.Parentb�O�	C�����Z�!��T�������$T���C�����a�-6��
T�����B�����UTONODELOPARENTPARENTTHISLDATAENVKEYDEKEY#T������T������UTHIS
OCONTAINERODATAENV7��C�����%�����0���C������UTHISGETCONTROLS
LINCLUDEDE-������T������T���a��%�������T�������T�������T��	���
��%�C��
����
	����T��������-������T������T������T��	�����%���

��
�T���-���&���C������UNODE	LCLASTKEYTHISCCHECKEDKEYSELECTEDCHECKEDKEYCCONTROLNAMETEXTCCONTROLPATHFULLPATHNODESITEM
LINCLUDEDELDATAENVISINDATAENVgetcontrols,��isindataenv
��Destroy���Init<	��	NodeCheck�	��1������RRAA���AA��aAAAAAA�AA���	a�A�AA�AA�q����q�Aa�AA��AA���A�AAAARQ�A�q�AAAA3qq���AAAA��32A2rr�111��A�A��A1Tev�wr���u�)
�zI
E�)d
{PROCEDURE searchbusiness
LPARAMETERS tcBizName

IF VARTYPE(tcBizName)#"C" OR EMPTY(tcBizName)
	LOCAL lcName
	lcName = INPUTBOX(ENTERUDDINAME_LOC, UDDISEARCH_LOC, "")
	IF EMPTY(lcName)
		RETURN
	ENDIF
	tcBizName = lcName
ENDIF

LOCAL loEnv AS "UDDIEnv.Envelope"
LOCAL loFind AS "UDDI10.find_business"
LOCAL loReq AS "UDDIEnv.RequestManager"
LOCAL loBizList AS "UDDI10.businessList"

LOCAL lcBizName, lcBizDesc, lcSvcName, lcSvcDesc 
LOCAL lcAccessPoint, loInfo, loEnv2, loEnv3, loEnv4, loSvcDet 
STORE "" TO lcBizName, lcBizDesc, lcSvcName, lcSvcDesc, lcAccessPoint

loReq = CREATEOBJECT("UDDIEnv.RequestManager")
IF VARTYPE(loReq)#"O"
	RETURN
ENDIF

loEnv = CREATEOBJECT("UDDIEnv.Envelope")
loFind = CREATEOBJECT("UDDI10.find_business")
loBizList = CREATEOBJECT("UDDI10.businessList")

loEnv.Plugin=loFind
loFind.name = tcBizName	
loFind.maxRows=100
loEnv2=loReq.UDDIRequest(loEnv)
IF VARTYPE(loEnv2)#"O"
	RETURN
ENDIF
loEnv2.Plugin=loBizList

FOR EACH loInfo IN loBizList.businessInfos
	lcBizName = loInfo.name

	TRY
		lcBizDesc = loInfo.Description.Item(1).Description
	CATCH
		lcBizDesc=""
	ENDTRY
	
	FOR EACH loSvc IN loInfo.serviceInfos

		lcSvcName = loSvc.name
		loEnv3 = CREATEOBJECT("UDDIEnv.Envelope")       
		loSvcDet = CREATEOBJECT("UDDI10.get_serviceDetail")
		loEnv3.Plugin = loSvcDet		
		loSvcDet.AddserviceKey.serviceKey = loSvc.ServiceKey
		loEnv4 = loReq.UDDIRequest(loEnv3)
		loSvcDet = ""

		IF loReq.UDDIErrno # 0
			LOOP
		ENDIF
			
		loSvcDet = CREATEOBJECT("UDDI10.serviceDetail")
		loEnv4.Plugin = loSvcDet
		
		TRY
			lcSvcDesc = loSvcDet.businessService(1).Description.Item(1).Description
		CATCH
			lcSvcDesc = ""
		ENDTRY
			
		FOR EACH loBind In loSvcDet.businessService(1).bindingTemplates
			lcAccessPoint = loBind.accessPoint.accessPoint
			IF ATC("WSDL", lcAccessPoint)#0 OR ATC(".ASMX", lcAccessPoint)#0
				EXIT
			ENDIF
		ENDFOR
		
		IF ATC("WSDL", lcAccessPoint)#0 OR ATC(".ASMX", lcAccessPoint)#0
			* Clean up WSDL reference
			lcAccessPoint = THIS.CleanAccessPoint(lcAccessPoint)
		ENDIF
			
		* Add items to array here
		THIS.UpdateServiceArray(lcBizName,lcBizDesc,lcSvcName,lcSvcDesc,lcAccessPoint)

	ENDFOR

ENDFOR
ENDPROC
PROCEDURE cleanaccesspoint
LPARAMETERS tcAccessPoint

* Do some cleanup here
LOCAL lcAccessPoint, i, lcTmpStr
lcAccessPoint=tcAccessPoint

DO CASE
CASE ATC(",", lcAccessPoint)#0
	FOR i = 1 TO GETWORDCOUNT(lcAccessPoint,",")
		lcTmpStr=GETWORDNUM(lcAccessPoint,m.i,",")
		IF ATC("WSDL", lcTmpStr)#0 OR ATC(".ASMX", lcTmpStr)#0
			lcAccessPoint=lcTmpStr
			EXIT
		ENDIF
	ENDFOR
CASE ATC(";", lcAccessPoint)#0
	FOR i = 1 TO GETWORDCOUNT(lcAccessPoint,";")
		lcTmpStr=GETWORDNUM(lcAccessPoint,m.i,";")
		IF ATC("WSDL", lcTmpStr)#0 OR ATC(".ASMX", lcTmpStr)#0
			lcAccessPoint=lcTmpStr
			EXIT
		ENDIF
	ENDFOR
ENDCASE
		
IF ATC(".ASMX", lcAccessPoint)#0 AND ATC("WSDL", lcAccessPoint)=0
	lcAccessPoint=LEFT(lcAccessPoint, ATC(".ASMX",lcAccessPoint)) + "ASMX?WSDL"
ENDIF

lcAccessPoint=ALLTRIM(lcAccessPoint)

RETURN lcAccessPoint

ENDPROC
PROCEDURE searchservice
LPARAMETERS tcBizName

IF VARTYPE(tcBizName)#"C" OR EMPTY(tcBizName)
	LOCAL lcName
	lcName = INPUTBOX(ENTERUDDINAME_LOC, UDDISEARCH_LOC, "")
	IF EMPTY(lcName)
		RETURN
	ENDIF
	tcBizName = lcName
ENDIF

LOCAL loReq AS "UDDIEnv.RequestManager"
LOCAL loEnv AS "UDDIEnv.Envelope"
LOCAL loFind AS "UDDI10.find_service"
LOCAL loSerList AS "UDDI10.serviceList"

LOCAL lcSvcName, lcSvcDesc
LOCAL lcAccessPoint, loInfo, loEnv2, loEnv3, loEnv4, loSvcDet 
STORE "" TO lcSvcName, lcSvcDesc, lcAccessPoint

loReq = CREATEOBJECT("UDDIEnv.RequestManager")
IF VARTYPE(loReq)#"O"
	RETURN
ENDIF

loEnv = CREATEOBJECT("UDDIEnv.Envelope")
loFind = CREATEOBJECT("UDDI10.find_service")
loSerList = CREATEOBJECT("UDDI10.serviceList")

loEnv.Plugin=loFind
loFind.name = tcBizName	
loFind.maxRows=100
loEnv2=loReq.UDDIRequest(loEnv)

IF VARTYPE(loEnv2) # "O"
	RETURN	
ENDIF

loEnv2.Plugin=loSerList

FOR EACH loInfo IN loSerList.serviceInfos

	lcSvcName = loInfo.name
	loEnv3 = CREATEOBJECT("UDDIEnv.Envelope")       
	loSvcDet = CREATEOBJECT("UDDI10.get_serviceDetail")
	loEnv3.Plugin = loSvcDet		
	loSvcDet.AddserviceKey.serviceKey = loInfo.ServiceKey
	loEnv4 = loReq.UDDIRequest(loEnv3)
	loSvcDet = ""
	IF loReq.UDDIErrno # 0	
		LOOP
	ENDIF

	loSvcDet = CREATEOBJECT("UDDI10.serviceDetail")
	loEnv4.Plugin = loSvcDet
	TRY
		lcSvcDesc = loSvcDet.businessService(1).Description.Item(1).Description
	CATCH
		lcSvcDesc = ""
	ENDTRY
		
     	FOR EACH loBind In loSvcDet.businessService(1).bindingTemplates
		lcAccessPoint = loBind.accessPoint.accessPoint
		IF ATC("WSDL", lcAccessPoint)#0 OR ATC(".ASMX", lcAccessPoint)#0
			EXIT
		ENDIF
	ENDFOR	

	IF ATC("WSDL", lcAccessPoint)#0 OR ATC(".ASMX", lcAccessPoint)#0
		* Clean up WSDL reference
		lcAccessPoint = THIS.CleanAccessPoint(lcAccessPoint)
	ENDIF
		
	* Add items to array here
	THIS.UpdateServiceArray("", "", lcSvcName,lcSvcDesc,lcAccessPoint)
		
ENDFOR
ENDPROC
PROCEDURE updateservicearray
LPARAMETERS tcBizName,tcBizDesc,tcSvcName,tcSvcDesc,tcAccessPoint

IF ASCAN(THISFORM.aUDDI, tcAccessPoint,-1,-1, 5, 7)#0
	RETURN
ENDIF

IF ALEN(THIS.aUDDI)<5
	DIMENSION THIS.aUDDI[1,5]
ENDIF

IF !EMPTY(THIS.aUDDI[1,5])
	DIMENSION THIS.aUDDI[ALEN(THIS.aUDDI,1)+1,5]	
ENDIF

THIS.aUDDI[ALEN(THIS.aUDDI,1),1] = tcBizName
THIS.aUDDI[ALEN(THIS.aUDDI,1),2] = tcBizDesc
THIS.aUDDI[ALEN(THIS.aUDDI,1),3] = tcSvcName
THIS.aUDDI[ALEN(THIS.aUDDI,1),4] = tcSvcDesc
THIS.aUDDI[ALEN(THIS.aUDDI,1),5] = tcAccessPoint

ENDPROC
PROCEDURE Error
LPARAMETERS nError, cMethod, nLine
RETURN
ENDPROC
PROCEDURE getproxycode
* This routine assumes that we have Foxws3 table open and currently on a valid class record. 
* If you do not wish to use Foxws3 table, then call GenProxyCode directly, but ensure to first
* set the code gen properties.
*
* Need to set Code Gen properties required by GenProxyCode. Note: the cGenWSML property is 
* only used with SOAP Toolkit XML Web services and only needed for custom type mapping

LOCAL lSuccess, lcCLass

TRY
	IF UPPER(Type)="C"
		lcClass = ALLTRIM(Class)
		* Need to validate class for variables
		IF CHRTRAN(lcClass ,"., ","___") # lcClass 
			THIS.cGenVar = WSGEN_DEFAULTVAR
		ELSE
			THIS.cGenVar = "lo" + lcClass
		ENDIF
		THIS.cGenService = ALLTRIM(Name)
		THIS.cGenPort = ALLTRIM(Port)
		THIS.cGenWSDL = ALLTRIM(Uri)
		THIS.cGenWSML = ALLTRIM(wsml)
		IF !EMPTY(THIS.cGenWSML)
			THIS.lincludewsml = .T.
		ENDIF
		THIS.lAddFoxcodeHeader = .T.
		lSuccess=.T.
	ENDIF
CATCH TO loException

ENDTRY

RETURN IIF(lSuccess,THIS.GenProxyCode(),"")
ENDPROC
PROCEDURE erroralert
LPARAMETERS tcMessage
MESSAGEBOX(tcMessage)

ENDPROC
PROCEDURE about
*!*	This class is the core class used for following:
*!*	- Handing of Proxy code generation for XML Web services

ENDPROC
PROCEDURE defaultsoapcode
* This routine contains generated proxy code that calls SOAP 3.0 Toolkit APIs directly.
* Do not call directly -- call from GenProxyCode!

LOCAL lcStr,lcPosMarker
lcStr=""
lcPosMarker="~"
IF THIS.lAddFoxCodeHeader
	lcStr = lcStr + [LOCAL ] + THIS.cGenVar + [ AS "] + ISENSETYPE + ["] + CRLF
	lcStr = lcStr + [* LOCAL ] + THIS.cGenVar + [ AS "] + SOAPCLIENT_CLASS + ["] + CRLF
	lcPosMarker=""
ENDIF

IF !THIS.lAddErrorCode
	TEXT TO lcStr TEXTMERGE NOSHOW ADDITIVE PRETEXT 2
	* Do not remove or alter following line. It is used to support IntelliSense for your XML Web service.
	*__VFPWSDef__: <<THIS.cGenVar>> = <<THIS.cGenWSDL>> , <<THIS.cGenService>> , <<THIS.cGenPort>>
	LOCAL loException,lcErrorMsg
	<<THIS.cGenVar>> = CREATEOBJECT(SOAPCLIENT_CLASS)
	<<THIS.cGenVar>>.SOAPCLIENT_INIT(<<THIS.cGenParms>>)
	* Call your XML Web service here. ex: leResult=<<THIS.cGenVar>>.SomeMethod()
	<<lcPosMarker>>
	ENDTEXT
	RETURN lcStr
ENDIF

TEXT TO lcStr TEXTMERGE NOSHOW ADDITIVE
* Do not remove or alter following line. It is used to support IntelliSense for your XML Web service.
*__VFPWSDef__: <<THIS.cGenVar>> = <<THIS.cGenWSDL>> , <<THIS.cGenService>> , <<THIS.cGenPort>>
LOCAL loException,lcErrorMsg
TRY
	<<THIS.cGenVar>> = CREATEOBJECT(SOAPCLIENT_CLASS)
	<<THIS.cGenVar>>.SOAPCLIENT_INIT(<<THIS.cGenParms>>)
	* Call your XML Web service here. ex: leResult=<<THIS.cGenVar>>.SomeMethod()
	<<lcPosMarker>>
CATCH TO loException
	lcErrorMsg="Error: "+TRANSFORM(loException.Errorno)+" - "+loException.Message
	DO CASE
	CASE VARTYPE(<<THIS.cGenVar>>)#"O"
		* Handle SOAP error connecting to web service
	CASE !EMPTY(<<THIS.cGenVar>>.FaultCode)
		lcErrorMsg=lcErrorMsg+CHR(13)+<<THIS.cGenVar>>.Detail
		* Handle SOAP error calling method
	OTHERWISE
		* Handle other error
	ENDCASE
	* Use for debugging purposes
	MESSAGEBOX(lcErrorMsg)
FINALLY
ENDTRY
ENDTEXT

RETURN lcStr
ENDPROC
PROCEDURE defaultclasscode
* This routine contains generated proxy code that calls SOAP 3.0 Toolkit APIs via a wrapper class.
* Do not call directly -- call from GenProxyCode!

* Get default wrapper class settings - from _ws3.h file. 
* Also, assumes class has a SetupClient method that sets up SOAP proxy.
* #DEFINE DEFCLIENT_CLASS		"WSClient"
* #DEFINE DEFCLIENT_CLASSLIB	"_ws3client.vcx"
* #DEFINE DEFCLIENT_CLASSINIT	"SetupClient"

LOCAL lcProxyClass, lcProxyClasslib, lcProxyClassVar, lcProxyClassInit, lcStr, lcPosMarker
lcProxyClass = IIF(EMPTY(THIS.cProxyClass), DEFCLIENT_CLASS, THIS.cProxyClass)
lcProxyClasslib = IIF(EMPTY(THIS.cProxyClasslib), DEFCLIENT_CLASSLIB, "["+THIS.cProxyClasslib+"]")
lcProxyClassInit = IIF(EMPTY(THIS.cProxyClassInit), DEFCLIENT_CLASSINIT, THIS.cProxyClassInit)
lcProxyClassVar = IIF(EMPTY(THIS.cProxyVar), WSPROXYVAR, THIS.cProxyVar)

lcStr=""
lcPosMarker="~"
IF THIS.lAddFoxCodeHeader
	lcStr = lcStr + [LOCAL ] + THIS.cGenVar + [ AS "] + ISENSETYPE + ["] + CRLF
	lcStr = lcStr + [* LOCAL ] + THIS.cGenVar + [ AS "] + SOAPCLIENT_CLASS + ["] + CRLF
	lcPosMarker=""
ENDIF

IF !THIS.lAddErrorCode
	TEXT TO lcStr TEXTMERGE NOSHOW ADDITIVE PRETEXT 2
	* Do not remove or alter following line. It is used to support IntelliSense for your XML Web service.
	*__VFPWSDef__: <<THIS.cGenVar>> = <<THIS.cGenWSDL>> , <<THIS.cGenService>> , <<THIS.cGenPort>>
	LOCAL loException, lcErrorMsg, <<lcProxyClassVar>>
	<<lcProxyClassVar>> = NEWOBJECT("<<lcProxyClass>>",<<lcProxyClasslib>>)
	<<THIS.cGenVar>> = <<lcProxyClassVar>>.<<lcProxyClassInit>>(<<THIS.cGenParms>>)
	* Call your XML Web service here.  ex: leResult=<<THIS.cGenVar>>.SomeMethod()
	<<lcPosMarker>>
	ENDTEXT
	RETURN lcStr
ENDIF

TEXT TO lcStr TEXTMERGE NOSHOW ADDITIVE
* Do not remove or alter following line. It is used to support IntelliSense for your XML Web service.
*__VFPWSDef__: <<THIS.cGenVar>> = <<THIS.cGenWSDL>> , <<THIS.cGenService>> , <<THIS.cGenPort>>
LOCAL loException, lcErrorMsg, <<lcProxyClassVar>>
TRY
	<<lcProxyClassVar>> = NEWOBJECT("<<lcProxyClass>>",<<lcProxyClasslib>>)
	<<THIS.cGenVar>> = <<lcProxyClassVar>>.<<lcProxyClassInit>>(<<THIS.cGenParms>>)
	* Call your XML Web service here.  ex: leResult = <<THIS.cGenVar>>.SomeMethod()
	<<lcPosMarker>>
CATCH TO loException
	lcErrorMsg="Error: "+TRANSFORM(loException.Errorno)+" - "+loException.Message
	DO CASE
	CASE VARTYPE(<<THIS.cGenVar>>)#"O"
		* Handle SOAP error connecting to web service
	CASE !EMPTY(<<THIS.cGenVar>>.FaultCode)
		* Handle SOAP error calling method
		lcErrorMsg=lcErrorMsg+CHR(13)+<<THIS.cGenVar>>.Detail
	OTHERWISE
		* Handle other error
	ENDCASE
	* Use for debugging purposes
	MESSAGEBOX(lcErrorMsg)
FINALLY
ENDTRY

ENDTEXT

RETURN lcStr

ENDPROC
PROCEDURE genproxycode
* This routine is called to generate proxy code. It assumes that 
* necessary code gen properties are already set.  If you are setting
* code gen properties from FOXWS3 table, you should instead
* call GetProxyCode instead, which calls this routine.
* Ensures that other gen properties are of correct type.

IF VARTYPE(THIS.cGenWSDL)#"C" OR EMPTY(THIS.cGenWSDL)
	RETURN ""
ENDIF
IF VARTYPE(THIS.cGenVar)#"C" OR EMPTY(ALLTRIM(THIS.cGenVar))
	THIS.cGenVar = WSGEN_DEFAULTVAR
	THIS.lAddFoxcodeHeader = .T.
ENDIF
IF VARTYPE(THIS.cGenService)#"C"
	THIS.cGenService=""
ENDIF
IF VARTYPE(THIS.cGenPort)#"C"
	THIS.cGenPort=""
ENDIF
IF !THIS.lIncludeWSML OR VARTYPE(THIS.cGenWSML)#"C" OR ATC(".asmx?wsdl",THIS.cGenWSDL)#0
	* Only include WSML file if SOAP Toolkit XML Web service using custom type mapper. 
	* Skip for all VS XML Web services.
	THIS.cGenWSML =""
ENDIF

DO CASE
CASE EMPTY(THIS.cGenService) AND EMPTY(THIS.cGenPort) AND EMPTY(THIS.cGenWSML)
	THIS.cGenParms = ["] + THIS.cGenWSDL + ["]
CASE EMPTY(THIS.cGenWSML)
	THIS.cGenParms = ["] + THIS.cGenWSDL + [", "] + THIS.cGenService + [", "] + THIS.cGenPort +["]
OTHERWISE
	THIS.cGenParms = ["] + THIS.cGenWSDL + [", "] + THIS.cGenService + [", "] + THIS.cGenPort  + [", "] + THIS.cGenWSML +["]
ENDCASE

* Now call routine to generate code
RETURN IIF(THIS.lCustomClientCode, THIS.DefaultClassCode(), THIS.DefaultSoapCode())
ENDPROC
PROCEDURE Error
LPARAMETERS nError, cMethod, nLine
LOCAL lcMessage
THIS.lhaderror=.T.
IF THIS.lSkiperror
	RETURN
ENDIF
lcMessage = MESSAGE()
IF nError = 3
	lcMessage = lcMessage + " " + FOXWSINUSE_LOC
ENDIF
THIS.ErrorAlert(lcMessage)

ENDPROC
^�� EE�%�9Z�U �����T���a��UNERRORCMETHODNLINETHIS	LHADERROR����%����
���B������%�����C�B��"T��C�_webservices�����%�C����O����B�� T��CC�M�����
FOXWS3.DBF��%�C�0
����B��T��CW��F��Q�����%�CC�����
F����B�-���7~�C'
��	�C�f�P	�CC�	�fC��
f	��d�%�CC�	�C������`�
��C��
����Q�T���
F����dR,�����TXML Web Service component was successfully rebuilt and supporting files regenerated.��UNERRORTHISNBUILDACTIONLOWS
LNSAVEAREACLASSLIBRARY
LCVFPWSDBFUSEPHOOKTYPECOMFILECOUTPUTNAMEAUTOWSCLASSGENWSM�������%���
��,�B��T������T���������#��Q�COMAdmin.COMAdminCatalog�(T��C�COMAdmin.COMAdminCatalog�N����C�����%%�C��	���C�
C��	�
	����T��C��	����$�3T���&IIS Out-Of-Process Pooled Applications�����C���
����C�����UCOUTPUTNAMENBUILDACTIONLREBUILDALLLSHOWERRORSLBUILDNEWGUIDSTHISLCAPPLOCATCONNECTCCOMPLUSAPPSHUTDOWNAPPLICATIONSTARTAPPLICATIONT����C����UTHISPROJECTNAME
ACTIVEPROJECTNAMEError,��
AfterBuildy��BeforeBuild���Init���1��3qCAA�CA#QAAAA�����qAs��ABB��A3qAAs1�Q!�1A3Q2Ij�%�l67��O)E#APROCEDURE processfile
LPARAMETERS tcCOMFile
LOCAL laInts, lnInts, i, lFoundFile, lcFile
DIMENSION laInts[1]
lnInts = THIS.oTypelib.GetClasses(@laInts,tcCOMFile)

IF lnInts = 0
	RETURN
ENDIF

* Check for file already in list
FOR i = 1 TO THISFORM.cboCOMFile.ListCount
	IF UPPER(ALLTRIM(THISFORM.cboCOMFile.ListItem[m.i])) == UPPER(tcCOMFile)
		lFoundFile = .T.
		EXIT
	ENDIF
ENDFOR
IF !lFoundFile
	lcFile = IIF(LEFT(tcCOMFile,2)="\\","\","")+tcCOMFile
	THISFORM.cboCOMFile.AddItem(lcFile)
ENDIF
THISFORM.cboCOMFile.DisplayValue = tcCOMFile

THIS.cboInterface.Clear()
FOR i = 1 TO lnInts
	THIS.cboInterface.AddItem(laInts[m.i,1])
ENDFOR

THIS.cboInterface.Value = THIS.cboInterface.ListItem[1]
THIS.cboInterface.Enabled = lnInts > 1
THIS.oWeb.lPrefsLoaded = .F.
ENDPROC
PROCEDURE checkclass
LOCAL lcInt
lcInt = ALLTRIM(THIS.cboInterface.Value)
IF EMPTY(lcInt)
	RETURN
ENDIF

THIS.imgVar.Visible = !THIS.oTypelib.CheckVariant(lcInt)
THIS.oWeb.lPrefsLoaded = .F.

ENDPROC
PROCEDURE generatews
LOCAL lcCOMFile, lcClass, i, lFound, lcResults, lcPHookMsg
lcCOMFile = ALLTRIM(THIS.cboCOMFile.DisplayValue)
lcClass = ALLTRIM(THIS.cboInterface.DisplayValue)
IF !FILE(lcCOMFile)
	MESSAGEBOX(NODLL_LOC)
	RETURN
ENDIF
IF LEFT(lcCOMFile,2)="\\"
	MESSAGEBOX(MB_NONLOCALSVR_LOC)
	RETURN
ENDIF
IF EMPTY(lcClass)
	MESSAGEBOX(NOCLASS_LOC)
	RETURN
ENDIF

* Generate Web Service files
IF !THIS.oWeb.Autows(lcCOMFile,lcClass)
	IF THIS.oWeb.lPrefsLoaded  && prefs loaded but need more info (file paths)
		MESSAGEBOX(MB_NONDEFSVR_LOC)
	ENDIF
	RETURN
ENDIF

* Check for first time and file existing
IF !THIS.oWeb.lPrefsExist AND ;
	((FILE(THIS.oWeb.cWSDLFile) AND THIS.oWeb.lGenWSDL) OR;
	(FILE(THIS.oWeb.cASPFile) AND !THIS.oWeb.lUseIsapi AND THIS.oWeb.lGenAsp))
	IF MESSAGEBOX(MB_WSFILESEXIST_LOC,36) = 7
		RETURN
	ENDIF
ENDIF

* Ensure that the methods are all valid
IF !THIS.CheckMethods()
	RETURN
ENDIF

* Check 	if local vdir and ISAPI mappings is valid
THIS.CheckIsapi()

* Generate the WSDL files here
WAIT WINDOW WAIT_PUBWS_LOC NOWAIT
IF !THIS.oWeb.GenWS()
	WAIT CLEAR
	RETURN
ENDIF
WAIT CLEAR

* Add Project Hook if necessary
lcPHookMsg = IIF(THIS.oWeb.lUsePHook,HASPHOOK_LOC,HASNOPHOOK_LOC)
IF THIS.oWeb.lChangePHook
	FOR i = 1 TO _VFP.Projects.Count
		IF UPPER(_VFP.Projects(m.i).Name) == UPPER(THIS.oWeb.cProject)
			lFound=.T.
			EXIT
		ENDIF
	ENDFOR
	IF !lFound
		MODIFY PROJECT (THIS.oWeb.cProject) NOWAIT
		FOR i = 1 TO _VFP.Projects.Count
			IF UPPER(_VFP.Projects(m.i).Name) == UPPER(THIS.oWeb.cProject)
				lFound=.T.
				EXIT
			ENDIF
		ENDFOR
	ENDIF
	IF lFound
		IF THIS.oWeb.lUsePHook
			IF EMPTY(_VFP.Projects(m.i).ProjectHookClass)
				_VFP.Projects(m.i).ProjectHookLibrary = THIS.ClassLibrary 
				_VFP.Projects(m.i).ProjectHookClass = PHOOKCLASS
			ELSE
				* Check if another hook already exists
				IF _VFP.Projects(m.i).ProjectHookClass # PHOOKCLASS
					lcPHookMsg = PHOOKCONFLICT_LOC 
				ENDIF
			ENDIF
		ELSE
			IF _VFP.Projects(m.i).ProjectHookClass = PHOOKCLASS
				_VFP.Projects(m.i).ProjectHookClass = ""
				_VFP.Projects(m.i).ProjectHookLibrary = ""
			ENDIF	
		ENDIF
	ENDIF
ENDIF

* Display results
WITH THIS.oWeb
TEXT TO lcResults NOSHOW TEXTMERGE
Results of components generated:

COM Server: <<.cCOMFile>>
Class: <<.cClass>>

Generated WSDL: <<IIF(.lGenWSDL, MB_YES_LOC, MB_NO_LOC)>>
WSDL: <<.cWSDLFile>>
Use ISAPI Listener: <<IIF(.lUseIsapi, MB_YES_LOC, MB_NO_LOC)>>
ASP (if not ISAPI): <<.cASPListener>>

Registered: <<IIF(.lISenseFailed, MB_REGFAIL1_LOC, MB_YES_LOC)>>
    <<IIF(.lISenseFailed, MB_REGFAIL2_LOC, "")>>
ENDTEXT
ENDWITH

MESSAGEBOX(lcResults,64,MBTITLE_WSGEN_LOC)

THISFORM.Release()

ENDPROC
PROCEDURE savepos
* Save positions
LOCAL laProps,lnPos,lnLines,lcPropStr,i
DIMENSION laProps[1]

IF ATC(FOXWSDBF,DBF())=0
	RETURN
ENDIF
LOCATE FOR UPPER(type) = "V"
IF !FOUND()
	RETURN
ENDIF
laProps=""
lnLines=ALINES(laProps,ALLTRIM(wsdl))
lnPos = ASCAN(laProps,"top =",-1,-1,-1,5)
IF lnPos#0
	laProps[lnPos]="top = "+TRANSFORM(THISFORM.top)
ELSE
	DIMENSION laProps[ALEN(laProps)+1]
	laProps[ALEN(laProps)]="top = "+TRANSFORM(THISFORM.top)
ENDIF
lnPos = ASCAN(laProps,"left =",-1,-1,-1,5)
IF lnPos#0
	laProps[lnPos]="left = "+TRANSFORM(THISFORM.left)
ELSE
	DIMENSION laProps[ALEN(laProps)+1]
	laProps[ALEN(laProps)]="left = "+TRANSFORM(THISFORM.left)
ENDIF
lcPropStr=""
FOR i = 1 TO ALEN(laProps)
	lcPropStr = lcPropStr + laProps[m.i] +CHR(13)
ENDFOR
REPLACE Wsdl WITH lcPropStr

ENDPROC
PROCEDURE loadpos
* Get Screen Settings
LOCAL lnTop, lnLeft, laProps, lnPos
DIMENSION laProps[1]

IF ATC(FOXWSDBF,DBF())=0
	RETURN
ENDIF

LOCATE FOR UPPER(type) = "V"
IF FOUND()
	IF  ALINES(laProps,ALLTRIM(wsdl)) > 0
		lnTop = 10
		lnLeft = 10
		lnPos = ASCAN(laProps,"top =",-1,-1,-1,5)
		IF lnPos>0
			lnTop = VAL(STREXTRACT(laProps[lnPos],"top =","",1,1))
		ENDIF
		lnPos = ASCAN(laProps,"left =",-1,-1,-1,5)
		IF lnPos>0
			lnLeft = VAL(STREXTRACT(laProps[lnPos],"left =","",1,1))
		ENDIF
		THIS.Top = lnTop
		THIS.Left = lnLeft
	ENDIF
ENDIF

ENDPROC
PROCEDURE checkiis
LOCAL oShell, nVersion
oShell = CREATEOBJECT("WScript.Shell")
THIS.lSkiperror=.T.
nVersion = oShell.RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\Parameters\MajorVersion")
THIS.lSkiperror=.F.
IF THIS.lHaderror OR nVersion<5
	MESSAGEBOX(MB_BADIIS_LOC)
	RETURN .F.
ENDIF
ENDPROC
PROCEDURE checkmethods
* Check that all methods are valid
LOCAL laMethods, lnCount, laTmpArray, i, lcCOMFile, lcClass, lHadProblem
lcCOMFile = ALLTRIM(THIS.cboCOMFile.DisplayValue)
lcClass = ALLTRIM(THIS.cboInterface.DisplayValue)
DIMENSION laMethods[1]
DIMENSION laTmpArray[1]
lnCount = 0
THIS.oTypelib.cTypelib = lcCOMFile
lnCount = THIS.oTypelib.GetMethods(@laMethods, lcClass, .F., .F., .T.)

WITH THIS.oWeb
	ACOPY(THIS.oWeb.aMethods, laTmpArray)
	DIMENSION .aMethods[1]
	.aMethods[1]=""
	FOR i = 1 TO ALEN(laTmpArray)
		IF ASCAN(laMethods, laTmpArray[m.i],-1,-1,-1,7)#0
			IF !EMPTY(.aMethods[1])
				DIMENSION .aMethods[ALEN(.aMethods)+1]
			ENDIF
			.aMethods[ALEN(.aMethods)] = laTmpArray[m.i]
		ELSE
			lHadProblem=.T.
		ENDIF
	ENDFOR
ENDWITH

IF lHadProblem
	THIS.oWeb.Saveprefs()
ENDIF

IF EMPTY(THIS.oWeb.aMethods[1])
	MESSAGEBOX(MB_ERRNOMETHODS_LOC)
	RETURN .F.
ENDIF
ENDPROC
PROCEDURE checkisapi
* Check to see if user has valid script mappings -- only for local vdirs.
LOCAL lcChild, lcVirDir
IF !THIS.oWeb.lUseIsapi
	RETURN
ENDIF
lcChild = JUSTPATH(THIS.oWeb.cWSDLListener)
lcChild = ALLTRIM(SUBSTRC(lcChild, ATC("//", lcChild)+2))
lcChild = IIF(RIGHT(lcChild,1)="/", LEFT(lcChild, LEN(lcChild)-1), lcChild)
lcChild = IIF(ATC("/", lcChild)=0, "", SUBSTRC(lcChild, ATC("/", lcChild)))
lcVirDir = "IIS://LocalHost/w3svc/1/Root" + lcChild
THIS.oWeb.Checkvdirmap(lcVirDir)
ENDPROC
PROCEDURE Error
LPARAMETERS nError, cMethod, nLine
THIS.lHaderror=.T.
IF THIS.lSkiperror=.T.
	RETURN
ENDIF

ENDPROC
PROCEDURE Init
LOCAL lcCOMFiles, laFiles, lnCount, i, lcFile, lcURI, loConfig
IF !THIS.CheckIIS()
	RETURN .F.
ENDIF
DIMENSION laFiles[1]
lcURI=""

* Check if first time and prompt to configure default location (VirDir)
THIS.oWeb.GetPrefs("URI",@lcURI)

IF THIS.oWeb.lHadError
	RETURN .F.
ENDIF

IF EMPTY(ALLTRIM(lcURI))
	MESSAGEBOX(FIRSTTIME_LOC+FIRSTTIME2_LOC,0,MBCONFIGTITLE_LOC)
	loConfig = NEWOBJECT("wsconfig",THIS.ClassLibrary)
	loConfig.lDefaultMode = .T.
	loConfig.Show()
ENDIF

* Get recently published files
IF THIS.oWeb.GetPrefs("COMFILE",@lcCOMFiles)
	lnCount = ALINES(laFiles, lcCOMFiles)
	FOR i = 1 TO lnCount
		lcFile = ALLTRIM(laFiles[m.i])
		IF FILE(lcFile)
			lcFile = IIF(LEFT(lcFile,2)="\\","\","")+lcFile
			THIS.cboCOMFile.AddItem(lcFile)
		ENDIF
	ENDFOR
ENDIF

* Check for open project, else use first item (most recent)
FOR i = 1 TO _VFP.Projects.Count
	* Skip if no OLEPUBLICS
	IF _VFP.Projects[m.i].Servers.Count = 0
		LOOP
	ENDIF
	* Check if file exists and already added
	lcFile = FORCEEXT(LOWER(_VFP.Projects[m.i].Name),"dll")
	IF !FILE(lcFile)
		lcFile = FORCEEXT(lcFile,"exe")
		IF !FILE(lcFile)
			LOOP
		ENDIF
	ENDIF
	IF ASCAN(laFiles,lcFile,-1,-1,-1,7)#0
		LOOP	
	ENDIF
	* Add it
	lcFile = IIF(LEFT(lcFile,2)="\\","\","")+lcFile
	THIS.cboCOMFile.AddItem(lcFile)
ENDFOR

* Get default file to display
lcFile = ""
IF THIS.cboCOMFile.ListCount > 0
	IF TYPE("_VFP.ActiveProject") = "O" AND _VFP.ActiveProject.Servers.Count#0 
		lcFile = FORCEEXT(LOWER(_VFP.ActiveProject.Name),"dll")
		IF !FILE(lcFile)
			lcFile = FORCEEXT(lcFile,"exe")
			IF !FILE(lcFile)
				lcFile=""
			ENDIF
		ENDIF
	ENDIF
	IF EMPTY(lcFile)
		lcFile = THIS.cboCOMFile.ListItem[1]
	ENDIF
	THIS.cboCOMFile.DisplayValue = lcFile
	THISFORM.ProcessFile(ALLTRIM(lcFile))		
ENDIF

* Reset Screen Pos
THIS.Loadpos()
ENDPROC
PROCEDURE Release
THIS.SavePos()
ENDPROC
w�� ^^��%�e���U������������
T�����T��CC�C�.���\���
�����T��C�����������(������T��C�
����T��C�C��.���.�� %�C��
�
C����	����
T�����!����B�C����ULCLINEILCMETHODLCTIPATMPLNLINESLCEXPRTIPS������������
T�����
�����%�CC�����b�T��C��������T��C������������(�����
T�����T��C�
����T��C����%�CC�
�������(T��CCC�
��C� C�
���\����%�C��
��{�T��������������T�����������T��������������	B����U	AMETHSILCMETHODLNCOUNTATMPLNLINESLCDESCPREFSMENU ���#����������T��C��	�R��T��
��V��%������p�B������
H�����CC��
�f�WS���T��C�Custom�N��%T��C�wspicker�������
��C����2%�C�loParm.cRetvalueb�C�CC�������	B�����T��C������%�C����O��W�	B�����%%�C�loParm.lUseCustomb�L����T��������(%�C�loParm.lAddErrorCodeb�L����T��������T��C����%�C��
���\��{BACKSPACE}���	B�������.��G�%�C�����
��O�	B�����
�����T��C�����%�����C���������������(����.�(T����
������C�
�����(T����
������C�
�����+T���C�Q�ffc\graphics\method.bmp����T��
��L������(����%�C�����
��~�	B�����T��C��	����%�C��
����T������T��
��T���(�C�XML Web Service�������B��"XML Web Service"���	B����UOFOXCODE	LNMETHODS	LAMETHODSLCTIP	LCTRIGGER
LOWSPICKERLOPARM	LCGENCODELOPROXYFULLLINE	VALUETYPELOCATION	USERTYPEDABBREVTHISCLASSLIBRARYSHOW	CRETVALUEGETPROXYOBJECTLCUSTOMCLIENTCODE
LUSECUSTOM
LADDERRORCODEGETPROXYCODE
GETSERVICE
GETMETHODSITEMSIICONGETTIPVALUETIPMENUITEM�����C��x��U	TCMESSAGEU�����������������	�
�����
���
H�]�4����.����"T���><(:;,?/[-+*&^%$#@!.=��T��C����T��C��C� C�>Q���T��C���T��CC��������(��%�T��C��.��T��CC����.���2�4�B�-��� T��C��]�FOXTOOLS.FLL��%�C�0
��o�B�-���Gb(��
���T��C�����C����
�������C�����T�	�C��C�����
�������C���	���'T�
��*__VFPWSDef__: �� = ��"T��C��
�����������%�����X�B�-���T��CC��C�
>\��T�
�CC���,���T��CC���,���T��CC���,���8-�C���
�
C���	�
C���	�C�f�C	��
%�C4
����
%�C�bThe XML Web service you are trying to access is not registered. Would you like to register it now?�� If you are unable to register this service, you can prevent this prompt by renaming the object reference in its "__VFPWSDef__" reference above.�$�x����B�-���%�C�
a���
��~�@��C�-Error retrieving XML Web service description.�����B�-���8-�C���
�
C���	�
C���	�C�f�C	��
%�C4
����B�-����ULCUSERTYPED	LCTRIGGERLCOPSLNWORDCOUNT
LCLASTWORDLAENVLNWINHDLLCFXTOOLLIBLALINESLCSTRLCSEARCHEXPRLNPOSLCWSINFOLCURI	LCSERVICELCPORT_WONTOP_WSELECT	_EDGETENV	_EDGETSTRURINAMEPORTTYPETHISOWEB
ADDFOXCODEALERT�&%�C�����C�CC������=�T����WSProxy���&%�C�����C�CC������z�T��������UTHISCPROXYGENCLASSCPROXYGENCLASSLIBCLASSLIBRARY������� %�C����C�CC�����7�	B�����
F�����-�C��C����
%�C4
��p�	B�����T���a��
��C����T��C�������T���-��%�C����O����	B�����	B����U	TCWSIDLOPROXYTHISCWSALIASUNIQUEID
LSKIPERROR
GETPROXYCLASSCPROXYGENCLASSCPROXYGENCLASSLIBF�������� T��C��]�FOXTOOLS.FLL��%�C�0
��R�B�-���Gb(��
���T��C�����C����
�������C�����T��C��C���	��T���loWS��
T�����+�a��6� %�C�LOCAL ������
�!��T���loWSC�_��T�������	B����U
LCFXTOOLLIBLNWINHDLLCSTRLAENVLCVARLNCOUNT_WONTOP_WSELECT	_EDGETENV	_EDGETSTR������T���a��%�����1�B�����T��CE��%�������QT���� �;Make sure your FOXWS3.DBF web services table is not opened.�����C�����UNERRORCMETHODNLINETHIS	LHADERROR
LSKIPERROR	LCMESSAGE
ERRORALERTH#%�C���
�
C��W�	��4�
F�����Q��
F�����UTHISCWSALIAS	NSAVEAREA�T���CW��%T���C�_webservices�����%�C�����O��S�B�-���%�C���
��s�B�-���T����������C���]��UTHIS	NSAVEAREAOWEBCLASSLIBRARY
CHECKWSDBFCWSALIASgettip,��
getmethodsh��main=��
erroralert���about���
getservice���
getproxyclass���getproxyobjecte��
getnextvar���Error^��Destroyp��Init���1q����QqA��AAA�3q���Q�QAq�A1��A1��AA�3r1RB�A��dQ�!�AsQ�AR1A�1AAA�"��A�Qaq���AA"��AqA��B�3q�35�s�1�!!��Q!A��qAqA����!��v!qA�������qA�qA��qAA3gqAa1A3qr�A�!��A����Q�A�3�qA����!���AAqA�2��AAq�A31�AA�3�Q�qAQqAa�2��*/~
.e�
�
�h�
^�i�����������%��A&�D�#���+)^��� ��f%�s6�U���%�C�����O����������T��C��������T��C�����	���*T��CC��R�/�����/6��T�
����.wsdl��T�����.asp��-T��CC����
������.wsdl��,T��CC����
������.asp��T��C��������T����������T����������T���������1%�������������	����T���������T��a���T��C��������T��C��������T� �C����!����T�"�C����#�����$����T�$���������%���&�'�(���%��%�)����%�CC��$�
�����$�C��$����T�$�C��$���%�*�������C�+�����U,LCURITHISOWEBPARMCSERVICEPF1	PGOPTIONSTXTNAMEVALUECBOWSDLFILEDISPLAYVALUE
CWSDLLISTENERCASPLISTENER	CWSDLFILETXTWSDLFILECASPFILECAPPNAME
TXTAPPNAME	LUSEISAPIOPGLISTENERLUSEJSCRIPT	OPGSCRIPTLUNICODE
CHKUNICODECHKPHOOKENABLED	LUSEPHOOKLCHANGEPHOOKCURI1PGURIS
TXTWSDLURICURI2TXTSCHEMAURICURI3
TXTMESSAGEURICURI4TXTACTIONURIAMETHODSOITEM	PGMETHODS
OLEMETHODS	LISTITEMSCHECKEDKEY	SAVEPREFS�J%�C� CC�������ָ��C� CC�������ָ��������C�|The WSDL location contains a space which is not currently supported in URLs by the Visual FoxPro XML Web Service extensions.�x��B�-���UTHISPF1	PGOPTIONSTXTWSDLFILEVALUECBOWSDLFILEDISPLAYVALUE���������������	�������
J���(��%�C����O��l�T��
����
�
��T�������
��T��
����
�����h�$T������ (��)��T��C����T��C����*T��CC��R�/�����/6��T��C����T������C���� T������CC��������C��������T���������(T������C�����6��T���������T���� �!�C�"�
��T���� ���#��T����$���%��(T����&��C�'����6��T���(�)���*��T���(�+���,��T���(�-���.��T���(�/���0����1��
�1����
T�����T��2�3����T��C�1�--a��2�4��%������������(����|�9��C�
�C�
���1C�
���1���5�6�7�8�����%�CC��9�
��������(�C��9��������(T��CC�
��9���5�6�7�:��T��;�a�����������d�&�����(����5�6�7�<��`�#T��C�
����5�6�7�:��T��;�a����������C��=�>��%�C��=�?�
���"�����(�C��=�?����%%�CC�
����=�?fC�f����T��a��.��)��CC�
����=�?����������%��
��}���	�������T��	����������T��	�����������U@OWEBREFI
LCWSDLFILELCURILFOUND	LCFILELOCLOITEMLNCOUNTTHISAURISLEFTPARENTTOPOWEBPARM
LBLCOMFILECAPTIONCCOMFILECCLASS	CWSDLFILE
CWSDLLISTENERPF1	PGOPTIONSTXTNAMEVALUETXTWSDLFILECBOWSDLFILEADDITEMDISPLAYVALUEOPGLISTENER	LUSEISAPI
TXTAPPNAMECAPPNAMECHKPHOOKENABLEDCPROJECT	LUSEPHOOK
CHKUNICODELUNICODE	OPGSCRIPTLUSEJSCRIPTPGURIS
TXTWSDLURICURI1TXTSCHEMAURICURI2
TXTMESSAGEURICURI3TXTACTIONURICURI4	LAMETHODSOTYPELIBCTYPELIB
GETMETHODS	PGMETHODS
OLEMETHODS	LISTITEMSADDAMETHODSITEMCHECKEDCOUNTOWEB
GETVIRDIRSAVIRDIRSp*T��������������C��C�Enabled�������OptionButton�������U	THISPF1	PGOPTIONS
TXTAPPNAMEENABLEDOPGLISTENERVALUE	OPGSCRIPTSETALL
updatesets,��
checkpaths��Init5��Refresh)��1q��������������A�����A�QQA�AA�AA2��qA3q�a�Q���A�����������������A�r�AAS�����AA�a1�AAAAa!Q�AA�AA�a��A3�12�%��(*�Q0po)�)�SPROCEDURE setupws
LPARAMETERS tcServiceID, tcMethod

LOCAL loException, lcErrorMsg, loWSHandler, lcSyntax, laParms
LOCAL lcMethod, lcParms, lHadError, lnPos, laTips, leRetVal, loParmForm ,i, lcByRefChar
LOCAL lHasDataSet, lctempstr, lHasHTML, lcTmpFile, lcRetVal 
LOCAL lnCount, laPEMs, loNode 

IF PCOUNT()<2 OR VARTYPE(tcServiceID)#"C" OR VARTYPE(tcMethod)#"C" 
	RETURN 	
ENDIF
THIS.cServiceID = tcServiceID
THIS.cMethod = tcMethod

THIS.oWeb.CheckWSDbf()
SELECT (THIS.oWeb.cWSAlias)
IF EMPTY(ALIAS())
	MESSAGEBOX(MB_FILEINUSE_LOC)
	RETURN
ENDIF

LOCATE FOR UniqueID=tcServiceID
IF !FOUND()
	RETURN
ENDIF

lcMethod=ALLTRIM(tcMethod)
THIS.lblWS.Caption=ALLTRIM(Name)

DIMENSION laTips[1]
ALINES(laTips, Tips, .T., CHR(13)+CHR(10))
lnPos = ASCAN(laTips, lcMethod+"(",-1,-1,-1,5)
IF lnPos=0
	RETURN
ENDIF
lcSyntax = laTips[lnPos]

* Get parameters here
THIS.colparms.wsSyntax=lcSyntax
THIS.colparms.genParms()

THIS.lblMethod.Caption=lcSyntax
THIS.lbLWSDL.ctarget=ALLTRIM(Uri)
IF ATC(".ASMX", Uri)#0
	THIS.lblWebTest.Visible = .T.
	THIS.lblWebTest.Enabled = .T.
	THIS.lblWebTest.ctarget=SUBSTR(THIS.lbLWSDL.ctarget,1,ATC("?",THIS.lbLWSDL.ctarget)-1)
ENDIF

lcParms = ""

IF THIS.colParms.Count>0
	loParmForm = NEWOBJECT("wsParms",HOME()+"FFC\_ws3client.vcx")
	loParmForm.oColParms = THIS.colParms
	loParmForm.SetupWS()
	loParmForm.Show(1)
ENDIF

* Get Parameters
lcParms = ""
IF THIS.colParms.Count>0
	* Need to create string here...
	DIMENSION laParms[THIS.colParms.Count]
	FOR i = 1 TO THIS.colParms.Count
		laParms[m.i] = ""
		lcByRefChar=""
		TRY
			laParms[m.i] = THIS.colParms.GetParm(m.i)
			lcByRefChar=IIF(THIS.colParms.Item[m.i].IsByRef,"@","")
		CATCH TO loException
		ENDTRY
		lcParms = lcParms + lcByRefChar + "laParms[" + TRANSFORM(m.i) + "]"
		IF m.i < THIS.colParms.Count
			lcParms = lcParms + ","
		ENDIF
	ENDFOR
ENDIF

lcMethod = lcMethod + "(" + lcParms +")"

TRY
	loWSHandler = NEWOBJECT("WSHandler",IIF(VERSION(2)=0,"",HOME()+"FFC\")+"_ws3client.vcx")
	IF EMPTY(ALLTRIM(wsml))
		loWSfox1 = loWSHandler.SetupClient(ALLTRIM(Uri), ALLTRIM(Name) ,ALLTRIM(Port))
	ELSE
		loWSfox1 = loWSHandler.SetupClient(ALLTRIM(Uri), ALLTRIM(Name) ,ALLTRIM(Port), ALLTRIM(wsml))	
	ENDIF
	leRetVal = loWSfox1.&lcMethod.
CATCH TO loException
	lHadError=.T.
	lcErrorMsg="Error: "+TRANSFORM(loException.Errorno)+" - "+loException.Message
	DO CASE
	CASE VARTYPE(loWSfox1)#"O"
		* Handle SOAP error connecting to web service
		IF !EMPTY(loWSHandler.SoapErrorString)
			lcErrorMsg=MB_NOWS_LOC + CRLF + CRLF + loWSHandler.SoapErrorDetail
		ENDIF
	CASE !EMPTY(loWSfox1.FaultCode)
		* Handle SOAP error calling method
		lcErrorMsg=lcErrorMsg+CHR(13)+loWSfox1.Detail
	OTHERWISE
		* Handle other error
	ENDCASE
ENDTRY

THIS.ReturnValue =  leRetVal

IF !lHadError
	* Populate byref return values in colParms collection
	FOR i = 1 TO THIS.colParms.Count
		TRY
			IF THIS.colParms.Item[m.i].IsByRef
				THIS.colParms.Item[m.i].AddProperty("ReturnValue", laParms[m.i])
			ENDIF
		CATCH
		ENDTRY
	ENDFOR
ENDIF

* Handle various types
DO CASE
CASE lHadError
	lcRetVal = lcErrorMsg

CASE VARTYPE(leRetVal)="C"
	lcRetVal = ALLTRIM(leRetVal)
	IF LEFT(lcRetVal,1)="<"
		lcRetVal = ALLTRIM(STRCONV(lcRetVal,9))
	ENDIF

CASE VARTYPE(leRetVal)#"O"
	lcRetVal = TRANSFORM(leRetVal)

CASE TYPE("leRetVal.length")="N"		&&complex XMLDOMNode object types
	lcRetVal="MB_NODISPLAY_LOC"
	IF leRetVal.length>0
		lHasDataSet = (ATC("IsDataSet",STRCONV(leRetval.item(0).xml,9))#0)
		IF lHasDataSet
			THIS.lDataset = .T.
			TEXT TO lctempstr NOSHOW TEXT PRETEXT 2
			<?xml version="1.0" encoding="utf-8"?>
			<DataSet xmlns="http://tempuri.org/">
			<<ALLTRIM(STRCONV(leRetval.item(0).xml,9))>>
			<<ALLTRIM(STRCONV(leRetval.item(1).xml,9))>>
			</DataSet>
			ENDTEXT
			lcRetVal = lctempstr
		ELSE
			loNode = leRetVal.item(0).parentNode
			IF VARTYPE(loNode)#"O"
				loNode = leRetVal.item(0).ownerDocument
				lcRetVal = loNode.xml
			ELSE
				lcRetVal = [<?xml version="1.0" encoding="utf-8"?>]
				lcRetVal = lcRetVal + loNode.xml
			ENDIF
		ENDIF
	ENDIF

OTHERWISE
	* Assume its a COM  Object
	lcRetVal=""
	SET TEXTMERGE ON NOSHOW
	SET TEXTMERGE TO MEMVAR lcRetVal ADDITIVE
	\Object Members
	\
	DIMENSION laPEMs[1]
	lnCount = AMEMBERS(laPEMs,leRetVal,3)
	lcLastPem = ""
	FOR i = 1 TO lnCount
		IF lcLastPem == laPEMs[m.i, 1]
			LOOP
		ENDIF
		\<<laPEMs[m.i, 1]>>:
		TRY
			lcValue = TRANSFORM(leRetVal.&laPEMs[m.i,1])
			\\ <<lcValue>>
		CATCH
		ENDTRY
		lcLastPem = laPEMs[m.i, 1]
	ENDFOR
	SET TEXTMERGE TO
	SET TEXTMERGE OFF

ENDCASE

* Choose which control to display with.
lHasHTML = (ALLTRIM(LEFT(STRTRAN(lcRetval,CHR(9),""),1))="<")
THIS.edtResults.Visible = !lHasHTML
THIS.oleBrowser.Visible = lHasHTML

TRY
	IF lHasHTML
		SET SAFETY OFF
		lcTmpFile = HOME()+TEST_TMP_FILE
		STRTOFILE(lcRetVal, lcTmpFile)  && some may need optional 3rd parm of 4
		THIS.oleBrowser.Object.Navigate2(lcTmpFile)
		THIS.xmlfile = lcTmpFile
		THIS.lDataSet = lHasDataSet
		THIS.lblBrowse.Enabled = .T.
	ELSE
		THIS.edtResults.Value = lcRetVal
		THIS.lblBrowse.Visible = .F.
	ENDIF
CATCH TO loError
ENDTRY

ENDPROC
PROCEDURE Destroy
IF VARTYPE(THIS.cFormref)="C" AND !EMPTY(THIS.cFormref)
	RELEASE (THIS.cFormref)
ENDIF
ENDPROC
PROCEDURE Resize
THIS._RESIZABLE1.AdjustControls()
ENDPROC
*�� �*�*��
%�&�)Ja'�Ub��C�������T���������C�������F����	��%���

����2T�������Change XML Web service...��
��C��
��T��������[�&%�C�THIS.colOperationsb�O��
�*��C�
colOperations�
collection�������O���������K�~�C�f�C����!��CC��� (C���)�����CC���������CC��������%�����G�#)�T�����T��a��T���C����T���C����T���C����T���C����T���C������CCC��� �����T��!�a�������W����U"THIS
PFSETTINGS
PGSERVICESLSTSERVICESCLEARLBLWSDLCTARGET
CBOMETHODSOWEBCWSALIAS
LFIRSTTIMELBLNEWWSCAPTION
LOADOBJECT
ACTIVEPAGE	ADDOBJECTTYPEADDLISTITEMCLASSNAMEUNIQUEID	NEWITEMIDURI	LISTCOUNT	LISTINDEXENABLEDWSDLWSMLSERVICEPORTWSNAME
UPDATESERVICELISTLWSFOUND�������%�C��
��g�F������$-�CC��fCC��f�C�f�C	��
%�C4
��c�B���T���C����T��	�C�	���T��
�C����T���C����T��
�C����T��������T������C��������������T��a����C��������(�C���`�#��CCC��
�C�
 C�
 �������%�������T��������
��C����ULCWSITHISOWEBCWSALIASUNIQUEIDTYPEWSDLURIWSMLSERVICENAMEPORTWSNAMECLASSLBLWSDLCTARGET
PFSETTINGS
PGSERVICES
LBLSERVICEDOCCAPTIONCOMFILE
CBOMETHODSENABLEDCLEARMENUADDITEM	LISTCOUNT	LISTINDEXUPDATEMETHOD=������������T������T������T������T������T������T��	��	��T��
��
����������
����#��C��� (���)���T�����T��-����T��������F������Z-�CC��fCC���f�CC��fCC���f	�CC��fCC���f	�C�f�C	�C'
	��T���C4��T��������
��%������� T������CC����=�����������������(�C����#��CCC��
�C�
 C�
 �������!T��C� �����6��%�C��	�
��e�T�!���	���
��C��"��T��C� �
�-�a6�����������������T��-��%�C��	�
������C��	���T�����������C��The specified Web Service does not appear to be registered on this machine. You may not be able to access all the Operation and Client options. Click the Refresh link on the Services page to register this Web Service.�x���(T��CC�SetupOperations���#���%�C��
�����C����7%�C�THIS.colOperationsb�O���$�%�	��������(���$�%�������&��'�(������CC�
���$�*�)��"��CC�
���$�+�,��)������T�&��'�(�����
��C��-����6�*��C�
colOperations�
collection��.���U/LCSTRITHISOOBJECTWSDLWSMLSERVICEPORTWSNAMEWSMETHODWSSYNTAX
PFSETTINGS
PGSERVICESLSTSERVICESADDITEM	LISTINDEXENABLEDLBLWSDLCTARGETOWEBCWSALIASURINAMETYPELWSFOUND
LBLREFRESHVISIBLE
LBLSERVICEDOCCAPTIONCOMFILE
CBOMETHODSMENU	LISTCOUNTVALUEUPDATEMETHOD
READMETHOD
COLOPERATIONSCOUNTTHISFORM	PGMETHODS
LSTOPERATIONSADDLISTITEMWSOPERATIONGETKEY	NEWITEMID
UPDATECLIENTS	ADDOBJECT���������T��a��
T�����BT��CC�����C�	C�����
colOperations���6��
�����}�T��	�
��
��T��	�����T��	�����T��	�
��
��T��	�����
H���1��C�
���
�T��	������C��	����1�T��	��C��]���%�������@�G`(� �'%�C�THIS.colOperations���O��0���LPARAMETERS toObj�Q��J* This snippet is automatically generated by the XML Web Services Builder.�<��5LOCAL lcClasslib, lHadError, loError, lBuilder, loObj�&��lBuilder = (VARTYPE(toObj)="O")�(��!loObj=IIF(!lBuilder, THIS, toObj)�$%�C�����C�	C��0	����0��)lcClasslib = "<<THIS.OperationClasslib>>"��"�T��MlcClasslib = IIF(!lBuilder, THIS.ClassLibrary, HOME() + "FFC\_ws3Client.vcx")����
IF !lBuilder �4��-	loObj.cContainer = "<<THIS.GetContainer()>>"���ENDIF����
��TRY����Q��J  loObj.AddProperty("colOperations", NEWOBJECT("<<lcClass>>", lcClasslib))������(������
����=��6  * Operation: <<THIS.colOperations(m.i).wsOperation>>�O��H  WITH loObj.colOperations.NewItem([<<THIS.colOperations.GetKey(m.i)>>])����C��<    .wsOperation = [<<THIS.colOperations(m.i).wsOperation>>]�9��2    .wsDesc = [<<THIS.colOperations(m.i).wsDesc>>]�=��6    .wsMethod = [<<THIS.colOperations(m.i).wsmethod>>]�=��6    .wsparmnum = <<THIS.colOperations(m.i).wsparmnum>>�;��4    .lOffline = <<THIS.colOperations(m.i).lOffline>>�A��:    .nParmPrompt = <<THIS.colOperations(m.i).nParmPrompt>>�'�����(�C�
�������I����#��    WITH .colParms.NewItem()�M��F      .Parmname = [<<THIS.colOperations(m.i).colParms(m.j).Parmname>>]�M��F      .Parmtype = [<<THIS.colOperations(m.i).colParms(m.j).Parmtype>>]�Q��J      .InputValue = [<<THIS.colOperations(m.i).colParms(m.j).InputValue>>]�U��N      .InputControl = [<<THIS.colOperations(m.i).colParms(m.j).InputControl>>]�W��P      .InputProperty = [<<THIS.colOperations(m.i).colParms(m.j).InputProperty>>]�$%�C�
�C�
�������3���      .IsByRef = .T.����    ENDWITH���'�����(�C�
���������T��a�����Y��R    WITH .colClients.NewItem([<<THIS.colOperations(m.i).colClients.GetKey(m.j)>>])�S��L      .ClientName = [<<THIS.colOperations(m.i).colClients(m.j).ClientName>>]�U��N      .ObjectRef = [<<THIS.colOperations(m.i).colClients(m.j).ObjectRef>>]				�X��Q      .BindTarget = [<<THIS.colOperations(m.i).colClients(m.j).BindTarget>>]					�S��L      .BindSource = [<<THIS.colOperations(m.i).colClients(m.j).BindSource>>]�O��H      .BindProp = [<<THIS.colOperations(m.i).colClients(m.j).BindProp>>]�Y��R      .lInvokeAtStart = <<THIS.colOperations(m.i).colClients(m.j).lInvokeAtStart>>�k��d      .lAlwaysCallWebService = <<THIS.colOperations(m.i).colClients(m.j).lAlwaysCallWebService>>				�'%�CC�
�C�
������
����O��H      .NodeName = [<<THIS.colOperations(m.i).colClients(m.j).NodeName>>]��'%�CC�
�C�
������
����M��F      .DSTable = [<<THIS.colOperations(m.i).colClients(m.j).DSTable>>]�M��F      .DSField = [<<THIS.colOperations(m.i).colClients(m.j).DSField>>]�c��\      .DSUseExistingCursor = <<THIS.colOperations(m.i).colClients(m.j).DSUseExistingCursor>>����    ENDWITH��������	  ENDWITH��������CATCH TO loError������  IF !lBuilder����~    THIS.DisplayError("Failed to load XML Web service operation/client data."+CHR(13)+CHR(10)+CHR(13)+CHR(10)+loError.Message)���  ENDIF���  lHadError = .T.����
��ENDTRY������RETURN !lHadError��G`�G`(��&��C�SetupOperations���	���T��	�������U
LHADMETHODLCSTRIJLHASCLIENTSLCCLASS
LHASMETHODTHISOPERATIONCLASSOOBJECTWSDLWSMLSERVICEPORTWSNAMEWEBSERVICEID
COLOPERATIONSCOUNTOPERATIONCLASSLIBCOLPARMSISBYREF
COLCLIENTSNODENAMEDSTABLEWRITEMETHOD������T���������(T��CC�������	����T�����
�������C�����
�������(��������������������CC�
�������"��CC�
�������������UJLNITEMLOOPERATIONTHIS
PFSETTINGS	PGMETHODS
LSTOPERATIONS	LISTINDEX
COLOPERATIONSLISTTOOLTIPTEXTWSDESC
LSTCLIENTSCLEAR
COLCLIENTSCOUNTADDLISTITEM
CLIENTNAMEGETKEY	NEWITEMID1���'��C���XML Web Service Error�x��UTCERRMESSAGE������
�����%�C����`���=�B��%�C�.VCXC������h�	B�����
T�����T������
T�����+�a����
H�����$�C�loControl.Parentb�O����!�'�C��f�FORM�
C���
	��(�
T�����T�����.���!�@�C�loTmpObject.Parentb�O�C��	�f�FORMSET	����%�C��	��
����
T�����T�����.����!�2���
T�����T����	��)T����CC������.6�����	B����U
LAPARENTLCNAMELOTMPOBJECT	LOCONTROLTHISOOBJECT	BASECLASSCLASSLIBRARYNAMEPARENT������F���������������T�����	�
��#T��	��C��	���-�a6��$T��CC�
��	�C�
 C�
 ���
T�����%�CC���
����$T��CC���	�C�
 C�
 ���/T��CC���
���CC�C� ��\�6���
T�����%�C��
��U�5T����Syntax: �C�
 C�
 C�
 C�
 ���%�C��
����:T����
Description: �C�
 C�
 C�
 C�
 ��� T�����C�
 C�
 ��T���������ULCSYNTAXLCDESC
LCDESCPANETHISOWEBCWSALIAS
PFSETTINGS
PGSERVICESWSMETHOD
CBOMETHODSDISPLAYVALUEENABLED	LISTCOUNTTIPS	LISTINDEXPREFSWSDLEDTDESCVALUE�%�-��I������
�������C����`��T��C����+�a����9%�C��f�FORM�C�loControl.DEClassb�C	����T��a��!��$%�C�loControl.Parentb�O����!��T�������
%����E�E��C�9This visual XML Web Service is not supported on Formsets.�x��T���a��B���T���C���	���T��
�C�Notify�v��GZ����C�����
��C��
��ULAPARENT	LOCONTROLLHASFORMSET	BASECLASSPARENTTHISLRELEASE
LFIRSTTIMEOOBJECTWEBSERVICEIDCSAVENOTIFYOWEB
CHECKWSDBF	UPDATEALL4T������%����ON��-�GZ� ��UTHISOOBJECTCSAVENOTIFY	updateall,��
updateservice���
loadobjectm��updateobjectr
��
updateclients���displayerror���getcontainer���updatemethodn!��setup$��Destroy@&��1b1a!�1�a�A�aQqqA!Q��!!!!!��AA�BA3qrB�AAA#!!!!c�b���1A!�AA�3�Ac1��Ab���a�1A1A��A�a�1�AAQA��q�a�!AA��A��A3���!�"!!!!�1AAr�q��a�A�AAAA�q�q�q��q1����rq1��QqA�A!Ar�q�1Q�1���q�Aq��1A!AqAqqqQQ��q�q�AbaBb1B3����a�a�!AA3qq21��AA��A����AAq��Aa��AA���AB�3�2A1B�!A�A�QA�AB2������AAAAAA�Q�AAA��q�3aqA1(%L.,AOMS}p���  2"�U"�"%��"&)B&w)R*�)�+oE,\,�)�*�PROCEDURE setup
LOCAL i, lnVirDirs, lcValue

lcValue=""

* Get local virtual directories
IF !THIS.oWeb.GetVirDirs()
	THIS.opgDefaultVD.option1.Enabled = .F.
	THIS.opgDefaultVD.option2.Enabled = .F.
	THIS.lblNew.Enabled = .F.
	THIS.lblPath.Enabled = .F.
	THIS.lblDesc.Caption = LBL_NOIIS_LOC
ENDIF

* Add local virtual directories to combo
IF !EMPTY(THIS.oWeb.aVirDirs)
	lnVirDirs = ALEN(THIS.oWeb.aVirDirs,1)
	FOR i = 1 TO lnVirDirs
		THIS.cboVirDir.AddItem(THIS.oWeb.aVirDirs[m.i,1])
	ENDFOR
	THIS.cboVirDir.DisplayValue=THIS.cboVirDir.ListItem[lnVirDirs]
	THIS.txtPath.Value = THIS.oWeb.aVirDirs[lnVirDirs, 2]
ENDIF

* Get default URL if previously saved.
* Note: user could have canceled out initially in which
* case there is an "*" stored.
THIS.oWeb.GetPrefs("Uri",@lcValue)

IF !EMPTY(ALLTRIM(lcValue)) AND ATC("*", lcValue)=0
	THIS.cDefURI = ALLTRIM(GETWORDNUM(lcValue,1,CHR(13)))
	THIS.cDefPath = ALLTRIM(GETWORDNUM(lcValue,2,CHR(13)))
	IF ASCAN(THIS.oWeb.aVirDirs,THIS.cDefURI)=0
		THIS.cboVirDir.AddItem(THIS.cDefURI)
	ENDIF
	THIS.cboVirDir.DisplayValue = THIS.cDefURI
	THIS.txtPath.Value = THIS.cDefPath
ENDIF

ENDPROC
PROCEDURE getwslocation
LOCAL lcVirDir, lcName, lcPath, lcVarName, lcParent, lcChild
lcPath = ALLTRIM(THISFORM.txtPath.Value)
IF THISFORM.opgDefaultVD.Value = 1
	lcVirDir = THISFORM.cboVirDir.DisplayValue 
	IF EMPTY(lcVirDir)
		lcVirDir = THISFORM.cboVirDir.Text
	ENDIF
	IF EMPTY(lcVirDir) OR RIGHT(ALLTRIM(lcVirDir),1)#"/" OR ;
		(ATC("http://",lcVirDir)=0 AND ATC("https://",lcVirDir)=0)
		MESSAGEBOX(VD_BADPARM_LOC)
		RETURN .F.
	ENDIF
ELSE
	lcName = ALLTRIM(THISFORM.txtNewVirDir.Value)
	lcVirDir = THISFORM.cboVirDir.DisplayValue + ALLTRIM(THISFORM.txtNewVirDir.Value)
	IF EMPTY(lcVirDir) OR EMPTY(lcPath) OR EMPTY(lcName)
		MESSAGEBOX(VD_BADPARM_LOC)
		RETURN .F.
	ENDIF

	lcChild = THISFORM.cboVirDir.DisplayValue
	lcChild = ALLTRIM(SUBSTRC(lcChild, ATC("//", lcChild)+2))
	lcChild = IIF(RIGHT(lcChild,1)="/", LEFT(lcChild, LEN(lcChild)-1), lcChild)
	lcChild = IIF(ATC("/", lcChild)=0, "", SUBSTRC(lcChild, ATC("/", lcChild)))

	lcParent = "IIS://LocalHost/w3svc/1/Root" + lcChild

	IF !THISFORM.oWeb.CreateVirDir(lcName, lcPath, lcParent)
		* Handle problem creating New Virtual Directory
		MESSAGEBOX(CREATEVDERR_LOC)
		RETURN .F.
	ENDIF
	IF RIGHT(ALLTRIM(lcVirDir),1)#"/"
		lcVirDir = lcVirDir + "/"
	ENDIF
ENDIF

* Set var reference for URL location
IF !EMPTY(THIS.cURLLocation)
	lcVarName = THIS.cURLLocation
	STORE lcVirDir TO &lcVarName.
ENDIF

* Set var reference for URL path
IF !EMPTY(THIS.cURLPath)
	lcVarName = THIS.cURLPath
	STORE lcPath TO &lcVarName.
ENDIF

IF THIS.lDefaultMode OR THIS.chkDefault.Value
	* set default location
	IF THISFORM.oWeb.UpdatePrefs("URI",lcVirDir + CHR(13) + lcPath)
		WAIT WINDOW VDSUCCESS_LOC TIMEOUT 1
	ENDIF
ENDIF

ENDPROC
PROCEDURE Init
LPARAMETERS tcURIVarRef, tcPathVarRef
IF VARTYPE(tcURIVarRef)="C"
	THIS.cUrllocation = tcURIVarRef
ENDIF
IF VARTYPE(tcPathVarRef)="C"
	THIS.cUrlPath = tcPathVarRef
ENDIF
THIS.Setup()

ENDPROC
PROCEDURE Show
LPARAMETERS nStyle
IF THIS.ldefaultmode 
	THIS.lblType.Caption = LBL1CAPTION2_LOC
ELSE
	THIS.lblType.Caption = LBL1CAPTION1_LOC
ENDIF
THIS.chkDefault.Visible = !THIS.lDefaultmode

ENDPROC
PROCEDURE Refresh
LOCAL lcVDir, i, lFound

lcVDir = ALLTRIM(THIS.cboVirDir.DisplayValue)
IF !EMPTY(THIS.cDefuri) AND lcVdir==THIS.cDefuri
	THIS.txtPath.Value = THIS.cDefPath
	lFound=.F.
ELSE
	FOR i = 1 TO ALEN(THIS.oWeb.aVirDirs,1)
		IF UPPER(THIS.oWeb.aVirDirs[m.i,1])==UPPER(lcVDir)
			THIS.txtPath.Value = THIS.oWeb.aVirDirs[m.i,2]
			lFound =.T.
			EXIT
		ENDIF
	ENDFOR
ENDIF

THIS.cmdGetDir.Enabled = IIF(THIS.cboVirDir.Style=2, .T., !lFound)

ENDPROC
"(�� ""��%&!-��U�����������
�����T��C�������%�����\�B�������(��	�
�����$%�CCC�
��	�
��fC�f����T��a��!����%��
���+T��CC��=�\\��\��6�����C��	�
�
���T�	�
�������C����������(����`���CC�
������
����T����C������T��������T����-��U	TCCOMFILELAINTSLNINTSI
LFOUNDFILELCFILETHISOTYPELIB
GETCLASSESTHISFORM
CBOCOMFILE	LISTCOUNTLISTITEMADDITEMDISPLAYVALUECBOINTERFACECLEARVALUEENABLEDOWEBLPREFSLOADEDf���T��C������%�C����/�B��T����C����
��T���	�-��U
LCINTTHISCBOINTERFACEVALUEIMGVARVISIBLEOTYPELIBCHECKVARIANTOWEBLPREFSLOADED!��������T��C������T��C��	����%�C�0
����:��C�.You must first select a valid COM server file.�x��B��%�C��=�\\���^��C�RCOM Servers on network locations are not supported. You must specify a local file.�x��B��%�C����W�/��C�#You must select a valid class name.�x��B��%�C����
�
��'�%���
�������CوYour specified web service location does not appear to be a local path. Click on the Advanced... button to enter this information first.�x���B��]%���
�

�FC��
�0�
��
�	�(C��
�0���
�
	�
��
�		����e%�C�NOne or more web service files already exist. Would you like to overwrite them?�$�x�����B���%�C��
���B��
��C����GR,:��<Please be patient while publishing your XML Web service.....��%�C��
�
����R�B��R�(T��C��
��	�Yes��None6��%���
����������(��C�����'%�CC�
��C��fC��
�f���T��a��!����%��
����/���
��:������(��C������'%�CC�
��C��fC��
�f����T��a��!�����
%������%���
����%�CC�
��C������T�C���
��������!T�C���
�����WSPHOOK���{�$%�C�
��C���WSPHOOK��w�1T���$Another project hook already exists.�������$%�C�
��C���WSPHOOK����T�C���
�������T�C���
���������������
����
M(�`�&� Results of components generated:����COM Server: <<.cCOMFile>>��Class: <<.cClass>>���5�/Generated WSDL: <<IIF(.lGenWSDL, "Yes", "No")>>��WSDL: <<.cWSDLFile>>�:�4Use ISAPI Listener: <<IIF(.lUseIsapi, "Yes", "No")>>�+�%ASP (if not ISAPI): <<.cASPListener>>���V�PRegistered: <<IIF(.lISenseFailed, "There was a problem accessing the ", "Yes")>>�R�L    <<IIF(.lISenseFailed, "Listener URI specified for the WSDL file.", "")>>����5��C��@�#XML Web Services Publishing Results�x��
��C�� ��U!	LCCOMFILELCCLASSILFOUND	LCRESULTS
LCPHOOKMSGTHIS
CBOCOMFILEDISPLAYVALUECBOINTERFACEOWEBAUTOWSLPREFSLOADEDLPREFSEXIST	CWSDLFILELGENWSDLCASPFILE	LUSEISAPILGENASPCHECKMETHODS
CHECKISAPIGENWS	LUSEPHOOKLCHANGEPHOOKPROJECTSCOUNTNAMECPROJECTPROJECTHOOKCLASSPROJECTHOOKLIBRARYCLASSLIBRARYTHISFORMRELEASE1�������
�����%�C�
FOXWS3.DBFC&����G�B��-�C�f�V��
%�C4
��m�B��
T�����T��C��C�����(T��C��top =�������������%�������"T������top = C��_���1���C����%T��C����top = C��_���)T��C��left =�������������%�������#T������left = C��	_�������C����&T��C����left = C��	_���
T����������(�C����T���C�
��C�
 ����
>�����U
LAPROPSLNPOSLNLINES	LCPROPSTRITYPEWSDLTHISFORMTOPLEFT�������
�����%�C�
FOXWS3.DBFC&����C�B��-�C�f�V��%�C4����%�C��C��������
T���
��
T���
��(T��C��top =�������������%�������(T��CCC���top =�����g���)T��C��left =�������������%�����a�)T��CCC���left =�����g���T������T��������U	LNTOPLNLEFTLAPROPSLNPOSTYPEWSDLTHISTOPLEFT����T��C�
WScript.Shell�N��T���a��fT��C�RHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\Parameters\MajorVersion����T���-��%������
���E��C�9Cannot run Wizard. You must be running IIS 5.0 or higher.�x��B�-���UOSHELLNVERSIONTHIS
LSKIPERRORREGREAD	LHADERRORw���������T��C���	���T��C��
�	���
�����
�����
T�����T�������T��C��--a���
������������C������
�������T�������������(�C�����.%�C�C�
�����������������%�CC���
��]���C������T��C����C�
�������T��a�������
%��������C������%�CC�������p����CمNo methods are specified for the selected class. Pick methods you would like to include in your Web service from the Advanced dialog.�x��B�-���U	LAMETHODSLNCOUNT
LATMPARRAYI	LCCOMFILELCCLASSLHADPROBLEMTHIS
CBOCOMFILEDISPLAYVALUECBOINTERFACEOTYPELIBCTYPELIB
GETMETHODSOWEBAMETHODS	SAVEPREFS����%����
��#�B��T��C������ T��CC�C�//���굛��0T��CC��R�/�C�C�>�=��6��1T��CC�/������C�C�/���6��-T���IIS://LocalHost/w3svc/1/Root�����C������ULCCHILDLCVIRDIRTHISOWEB	LUSEISAPI
CWSDLLISTENERCHECKVDIRMAP:�����T���a��%���a��3�B��UNERRORCMETHODNLINETHIS	LHADERROR
LSKIPERRORP���������%�C��
��8�B�-���
�����
T�������C�URI���	�
��%���	�����B�-���%�CC�����F�n��CٛBefore you can start publishing XML Web services, it is recommended that you set a local URL (virtual directory) to store generated XML Web service files. ّThis is a default location used to simplify publishing your XML Web Services. You will only need to set this once and can easily change it later.��,Visual FoxPro XML Web Services Configuration�x��T��C�wsconfig�����T��
�a��
��C�����"%�C�COMFILE���	�
���T��C�����������(�����T��CC�
�����%�C�0����+T��CC��=�\\��\��6�����C���������������(��C���� � %�C�
��C������H�.��$T��CCC�
��C��@�dll���%�C�0
����T��C��exe���%�C�0
����.���'%�C������������������.��+T��CC��=�\\��\��6�����C��������
T�����%�������<�9%�C�_VFP.ActiveProjectb�O��C����	����T��CC�C��@�dll���%�C�0
����T��C��exe���%�C�0
����
T��������%�C�����T��C�������T���������CC�������
��C����U
LCCOMFILESLAFILESLNCOUNTILCFILELCURILOCONFIGTHISCHECKIISOWEBGETPREFS	LHADERRORCLASSLIBRARYLDEFAULTMODESHOW
CBOCOMFILEADDITEMPROJECTSCOUNTSERVERSNAME	LISTCOUNT
ACTIVEPROJECTLISTITEMDISPLAYVALUETHISFORMPROCESSFILELOADPOS
��C����UTHISSAVEPOSprocessfile,��
checkclass���
generatewsn��savepos���loadposr��checkiisB��checkmethods���
checkisapi���Error��Init~��Release���1qq��AA�A�AAA��AA1q�A�q2qQ�AA�3�QQ�AA��AA��AA�1A	AAA�QAAA#AA�sQQAAQ�1�q�AAA�!�q�AAAA�1���BAA�A��AAAA�aa��aQ���aa!AAR�3r��AA�AA�q�!�AQA�1�AaA���A�32��AA������A��AAA3���a��QqA2�QQ���1�q�A��QQA���AAA�A�	qA2�AAAa�A2��!AA3�!qA���2qA����A#Qqa��AAAA�AABaAAAqAA�AA�q��a�AAA�qA1!A�2�16�!#	�,}����:��Y���� ��A%	�A���
#+(#6#l)"t�� �t�t��%Gi0s%�j�U5��������T��a��T��CW��%�C��
��U�
F����B�-���
F�����@-�C�	f�P�CC�
�fC��f	�CC��fC��
f	�C'
	��%�C4
�CC�����8�
��C����@-�C�	f�P�CC�
�fC��f	�CC��fC��
f	�C'
	��%�C4
�CC�����4�
F����B�-����T��C����
F��������'T��C�WSDLGEN.WSDLGenerator30�N��&T��C�msxml2.domdocument.4.0�N����C�������C�����T��C�����C���������T��-����%���C�COMFILE��a������	B����ULOGENLOGEN2LODOMLSUCCESS
LNSAVEAREALCXMLTHIS
CHECKWSDBFCWSALIASTYPECOMFILECCOMFILECLASSCCLASSMENU	SAVEPREFSLOADXMLINITGENERATEFILEUPDATEPREFSC�������������	�%�C���C����v�)��C�Invalid parameter passed.�
���B�-���%�C�0
����9��C�)The WSDL or WSML file could not be found.�
���B�-���%�C������T��C��WSML����%�C�0
��H�9��C�)The WSDL or WSML file could not be found.�
���B�-���%�C����u�T��C����Server���
T�����
T�	����T��C����	]��T��C����	]��>T��C�
��C����
�
�C����
�6��T��C�SAFETYv��G.���C�����SET SAFETY &lcSafety.
UTCASPTCWSDLTCWSML	TCAPPNAME	LCFILESTRLCWSDLLCWSML	LCAPPNAMELCSAFETYLCASPTHISALERTLUSEJSCRIPT	GETASP_JS
GETASP_VBSR���%��C�������4�T�������K���C���x���U	TCMESSAGE	STARTMODETHISLSKIPALERTS
CERRORMESSAGE����������������	���b�9T��CC���"�IIS://LocalHost/w3svc/1/Root��6��T��C��\��(T��C�IIsWebVirtualDir���
��T���-��T���a��T��
�-��T���a��T������T���-��T���-����C�Path�������C�����T������
��C����T������T��C�
WScript.Shell�N��RT�	�C�>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSOAP\30\SOAPISAP\isapi����%�C�	0��^���C����/T��C����.wsdl,�	�,1,GET,POST����C��
����C�
ScriptMaps�����
��C�������u�T��a����
B��
��UTCNEWVIRDIRTCPATHTCPARENTOSERVOBJVDIROBJ	LHADERRORLCPARENTLAMAPSOSHELLLCFILECREATE
ACCESSREADACCESSSCRIPT
ACCESSEXECUTEASPBUFFERINGONAPPISOLATEDASPALLOWSESSIONSTATECONTENTINDEXEDPUT
APPCREATE2APPFRIENDLYNAMESETINFO
SCRIPTMAPSREGREAD����������������	�
���
����������'��������������� �!�"�#�)J���(���������J���(�$�%��J���(�&�'��T�(�)�-���(�*����T�(�*����T��CW��%�C����E�B�-���
T�����%�C����|�T��C��WSML����&T��C�msxml2.domdocument.4.0�N��T��+�-��%�C���,���T�'���-��-%�C�GenericCustomTypeMapper�'�����
T�������%�C���,����T�&���-������A��C�SelectionNamespaces�xmlns:wsdl="��/�0�"��.������T�"�a�����)T��C�MSSOAP.WSDLReader30����T�(�1�a�������(����-�T�(�2�-����C����,��%��(�2
��)�!����T�(�1�-��%��(�2��d�T�(�2�-��B�-���%�C�(�3
����
F����B�-���
F��(�4����C���5��+�a��z���C�����6��%�C����O����!��
T�
����T�(�7���8��T�	��(�7��T�
���9��T��C��]��
T��C��>-�CC�8�fCC�	�f�C�:f�W	�CC�;�fCC��f	�C'
	��%�C4����
%������?>�8��	��;����<��&��=��'��>����?������D�Xr���(�4��:�8�;�<�=�>�?���W���	������&���'���������
T�������C���@��+�a��\���C�����6��%�C����O����!��T�
���8��
T���
��
H���V�6�C�
.asmx?wsdl����CC��Rf�SOAP	���T��C�C�>�=�� �CC��Rf�SOAPPORT��V�T��C�C�>�=���
T�����
T�����
T�!������C���A��+�a��}
�J���(������C�����6��%�C����O����!��*%�C�UpdateSingleTable��8������ T�����8C�
 C�
 ��
T��������%��"
���eT���//wsdl:portType[@name='�
�']/wsdl:operation[@name='��8�']/wsdl:documentation��T� �C���B��%�� �C�����T��C�� �D�E������
���)T�!��!��8� �C�
 C�
 ����C���F��
T�����T�G��VOID��+�a���	�
T�������C�����6��%�C����O����!��$%�C��H��C��I���O	��8	�#%�C�:schema��I�-����	�T�#��Dataset���4	�T�#��XMLDOMNodeList����P	�T�#���H���%���J�����v	�
T�G��#����	�T�����K� AS ��T����#��%���L����	�T���� @���T����, ����T��C����%�C��R�,��2
�T��C��C�>�\���"T�����8�(��)��%T���� AS �GC�
 C�
 ���T��C��]��
T��C��Q-�CC�8�fCC�	�f�C�:f�C	�CC�;�fCC��f	�CC�M�fCC�
�f	�C'
	��%�C4��}�
%����y�q>�8��	��N����O����;����=����P����M��
��>����?����Q��
��R��!������r���(�4��:�8�N�O�;�=�P�M�>�?�S�Q�R���C���	������������������
��������a���
���!���
T�����
T�����
T�����
T�����
T������
T�����
T��������C�MENU�	a�(�T��
F����UUTCWSDL	TLREFRESHTCWSMLIJLCMETHODSTR	LCTIPSSTR
LCTIPS2STR	LCWSMLGTMLCWSNAME
LCSERVICEPORT	LCSERVICELCPORTLCSERVICEDOCLCWSDLLCWSMLLCID
LDDATETIME
LNSAVEAREALOXMLDOMLCCLASSOGENLOPARTSLOENUMPARTSLOMETHOD
LOENUMMETHODSLOPORTLOENUMPORTS	LOSERVICELOENUMSERVICESLCDOCSTR
LCDOCXPATHLONODESLCMETHODSTR2
LFAILXPATH	LCGETTYPELCURI
CMETHODSTR
LCWSDL_XML
LCWSML_XMLTHIS
LISENSEFAILEDAPORTSASYNCLOADXMLSETPROPERTYDOCUMENTELEMENTNAMESPACEURI
LIGNOREERRORS	LHADERROR
CHECKWSDBFCWSALIASGETSOAPSERVICESNEXTCWSNAMENAME
DOCUMENTATIONTYPEURIWSDLWSML	TIMESTAMPUNIQUEIDGETSOAPPORTSGETSOAPOPERATIONSSELECTNODESLENGTHITEMTEXTGETOPERATIONPARTS	LCRETTYPEELEMENTTYPE
SCHEMANODEPARAMETERORDERELEMENTNAMEISINPUTPORTMENUTIPSCLASSCOMFILEPREFSTOOLBOXUPDATEPREFS����
H���������5�B��variant�������S�
B��NULL�������t�B��integer���������B��integer���������B��number���������B��double���������B��currency��������
B��date�������5�B��string�����	��V�B��VARIANT�������w�B��boolean���������B��variant���������B��number���������B��number���������B��number��������B��number�������9�B��integer�������Z�B��integer�������x�
B��VOID���������
B��VOID��2���B��variant���UNTYPE��������
T�����T��CW��#%�C���
�
C��W�	��W�B�� T��CC�M�����
FOXWS3.DBF��F��%�C�0���Q�����%����CC�����T���-��
F����B�-���%�C.�����T���C��B��Q��T��C�Safetyv��G.��h1�����C����	�M�
�M��M��M�
�M��M��M��M��M��M��L��L��M��M��T��C��
���M�Q�����SET SAFETY &lSafety
%�CC����
F����B�-���T���C��F��"T��CC��Q���foxcode.dbf��%�C�0
��x�T��C�Q�foxcode.dbf���%�C�0����Q�����%�CC�
����#)�T��C�g���Q��
F�����%r������	���V��C�_��U
LCVFPWSDBFLSAFETY
LNSAVEAREA
LCHOMEFOXCODELNFOXCODEVERTHISCWSALIAS	LHADERRORTYPENAMEMENUTIPSURIWSDLWSMLPREFSCOMFILEASPFILEPROJECTUSEPHOOKTOOLBOXCLASSPORT	TIMESTAMPUNIQUEIDUSEREXPANDED�����T���a��T��C�IIS://localhost�\��T���-��%�����o�T���-��B�-���T��CC�]���T���http://��/�����������J���(�����C�������%������T���-��B�-���UOSERVOBJ	LCMACHINELCVIRDIRTHIS
LIGNOREERRORS	LHADERRORAVIRDIRSLOOPVIRDIRS��������������	�
T�����������T�	�-��X%�CC��
f�
IISWEBSERVICE�IISWEBSERVER�IISWEBVIRTUALDIR�IISWEBDIRECTORY�����
H�����<�CC��f�IISADMIN�IISHELP�PRINTERS�MSADC�����.��C�_vti_�������.��C�.������:�.����-��L�&�C��
f�IISWEBVIRTUALDIR����%�C��f�ROOT
����T������/���T����
��T�	�a��%�C��
f�IISWEBDIRECTORY����T������
T�����%�C��f�ROOT
��;�T������/���+�a����T��C���\��$%�C�loTmpParent.Pathb�C����T��C��
����!����T�����\����
T������T�	�a���
%��	��s�%�C���
��$�"���C����������$T���C�����������'T���C��������C�����T��������C����������UOPARENTTCVIRDIRTNLEVELNLEVELCVIRDIROCHILDLOTMPPARENT
LOTMPCHILDLCPATHLADDVDIRCLASSNAMEACCESSSCRIPTPATHPARENTTHISAVIRDIRSLOOPVIRDIRS��������������T��CW��%�C���C����U�B�-���%�C�	�

�������C�OThe XML Web Service data file could not be updated. Make sure it is not in use.� (CC�M�����
FOXWS3.DBF�)�	���B�-���
F��	���-�C�
f�V�C'
	��
%�C4
��w�NINSERT INTO (THIS.cWSAlias) (type,name,&tcField.)  VALUES("V","1",tcValue)
���
%����x�
�����(lnCount = ALINES(laItems, &tcField.)
T��C����T��C�0�������(����g�E%�CC�
������CC�
��0
	�CC�
��fC�f��?�.��$T���C�
 C�
 C�
������
T������"REPLACE &tcField. WITH tcValue
�
F����UTCFIELDTCVALUETLAPPENDLAITEMSLNCOUNTILCTMPSTRLISFILE
LNSAVEAREATHIS
CHECKWSDBFALERTCWSALIASTYPEp�����%�����6�
H�,����C��0
����>��C�.You must first select a valid COM server file.����B�-���C�������R��C�BYou must enter a WSDL file name for generation option(s) selected.����B�-���C�����;�3��C�#You must select a valid class name.����B�-�����	
�	C��
�	����U��C�EYou must enter an ASP listener URL for generation option(s) selected.����B�-���$T��C��	�	�����
6��T��C����%��
��2�0��C�Error generating �WSDL files.����B�-����%���	
���
	���%�C�������R��C�BYou must enter an ASP file name for generation option(s) selected.����B�-���%�C�����/�R��C�BYou must enter a WSDL file name for generation option(s) selected.����B�-���T��C���WSML���%�C�������D��C�4Please specify an application name for ASP listener.����B�-���'T��C�����������%��
���/��C�Error generating �
ASP files.����B�-����%�����\�%�C��a��
��X�T���a����
��C����U
LCWSMLFILELRESULT
LCLISTENERTHISLGENWSDLCCOMFILEALERT	CWSDLFILECCLASS	LUSEISAPICASPLISTENER
CWSDLLISTENERGENWSDLLGENASPCASPFILECAPPNAMEGENASPLGENINTELLISENSE
ADDFOXCODE
LISENSEFAILED	SAVEPREFS�����5����������	���
���
��%�����\�B��T������T������T���-��%�C������T���a��T���a���%�C�������
��C�����%�������B��
�
����
T�����4T�
�C�_typelibCC�������_utility.vcx���T�
������T��C�
��--a�
���%������������������(������"T����
���C�
���
�����T������
T�����%�C����9�T��C�URI�����%%��
�C���C���*����
T�����
T�����8T��C�wsconfig����lcRetVal�	lcRetVal2���T���-��
��C����T��C����T��C����%�C������B�-���
��C�����5�T��CC��C�
 ���T��CC��C�
 �����%�C�� ���\�
��C�����T��C�� ����%������'%�C�http://localhost/������TT��C�� �http://CCC�]����/C��http://localhost/���������
���T��C����%�C���
����"%�C��!���L���!	��s�T��C����_�������T��������T���a��T��"�a��T��#�a��T��$�a��T��%�a��(%�CC�Jg��CCC�Jg�
�Z�	���T��%�-���T�	�C�� 	�_���T��&���	�.ASP��T��'���	�.WSDL��%������� T��(�C���	�.WSDL��T��)�C���	�.ASP����+T��(�CC���� ��	�.WSDL��*T��)�CC���� ��	�.ASP���T��*���Server��T��+�-��T��,�C��(���
H�`����C�>�����T��-�C��=��(�C�>C�web service>������$T��-��� �web service��2���T��-���_WS���1T��.��http://tempuri.org/��/wsdl/��1T��/��http://tempuri.org/��/type/��4T��0��http://tempuri.org/��	/message/��3T��1��http://tempuri.org/��/action/��B�U2	TCCOMFILETCCLASSLCRETVAL	LCRETVAL2LRETVALLNPOSLOCONFIGLCNAME	LCDEFPATHLCNAME2OTYPELIBILNCOUNT	LAMETHODSLCDEFURITHISLPREFSLOADEDCCLASSCCOMFILELPREFSEXIST	LOADPREFSCPROJECT
GETPROJECTCLASSLIBRARYCTYPELIB
GETMETHODSAMETHODSCDEFLOCATIONGETPREFSLDEFAULTMODESHOW
GETVIRDIRSAVIRDIRS
LUSELONGTNAMELGENWSDL	LUSEISAPILGENASPLGENINTELLISENSECASPLISTENER
CWSDLLISTENER	CWSDLFILECASPFILECAPPNAMELUSEJSCRIPTCSERVICECISENSECURI1CURI2CURI3CURI4��������T��CW��%�C����4�B�-���%�C��
��_�T���a��B�-���
F�����-�C�f�V��
%�C4
����
F����B�-��� tcValue = ALLTRIM(&tcField.)

F����UTCFIELDTCVALUE
LNSAVEAREATHIS
CHECKWSDBF	LHADERRORCWSALIASTYPE�
��������
T�����T��CW��%�C��
�������C�OThe XML Web Service data file could not be updated. Make sure it is not in use.� (CC�M�����
FOXWS3.DBF�)����B�-���
F���	��
M(�`��LPARAMETERS toWebS���+�%toWebS.cCOMFile = [<<THIS.cCOMFile>>]�'�!toWebS.cClass = [<<THIS.cClass>>]�+�%toWebS.cProject = [<<THIS.cProject>>]�+�%toWebS.cService = [<<THIS.cService>>]���'�!toWebS.lGenASP = <<THIS.lGenASP>>�)�#toWebS.lGenWSDL = <<THIS.lGenWSDL>>�9�3toWebS.lGenIntelliSense = <<THIS.lGenIntelliSense>>�+�%toWebS.lUsePHook = <<THIS.lUsePHook>>�)�#toWebS.lUnicode = <<THIS.lUnicode>>�+�%toWebS.lUseIsapi = <<THIS.lUseIsapi>>�/�)toWebS.lUseJScript = <<THIS.lUseJScript>>���3�-toWebS.cASPListener = [<<THIS.cASPListener>>]�5�/toWebS.cWSDLListener = [<<THIS.cWSDLListener>>]�+�%toWebS.cASPfile = [<<THIS.cASPfile>>]�-�'toWebS.cWSDLfile = [<<THIS.cWSDLfile>>]�+�%toWebS.cAppName = [<<THIS.cAppName>>]�)�#toWebS.cISense = [<<THIS.cISense>>]���%�toWebS.cURI1 = [<<THIS.cURI1>>]�%�toWebS.cURI2 = [<<THIS.cURI2>>]�%�toWebS.cURI3 = [<<THIS.cURI3>>]�%�toWebS.cURI4 = [<<THIS.cURI4>>]����%�CC���
�
����G`(� �9��2DIMENSION toWebS.aMethods[<<ALEN(THIS.amethods)>>]������(�C��
��\�:��3toWebS.aMethods[<<m.i>>] = "<<THIS.aMethods[m.i]>>"���G`�G`(�T���C�
 C�
 ����G`(� ������(�C��
��+�Q��J<<IIF(m.i=1,"",REPLICATE(" ",12))>><method name="<<THIS.aMethods[m.i]>>">	�%��<<REPLICATE(" ",12)>></method>���G`(�G`�
M(�`�*�$<WSDLGenConfig WSDLGenVersion="3.0" �%�serviceName="<<THIS.cService>>"�(�"COMObjectPath="<<THIS.cCOMFile>>" �6�0listenerURI="<<JUSTPATH(THIS.cWSDLListener)>>/" �;�5listenerType="<<IIF(THIS.lUseIsapi,[ISAPI],[ASP])>>" ��XSDSchemaNS="2001" �&� definitionsTNS="<<THIS.cURI1>>" �!�schemaTNS="<<THIS.cURI2>>" �"�soapBodyNS="<<THIS.cURI3>>" �%�soapActionURI="<<THIS.cURI4>>" �=�7characterSet="<<IIF(THIS.lUnicode,[UTF-16],[UTF-8])>>" �1�+outputPath="<<JUSTPATH(THIS.cWSDLfile)>>" >��   <selectedInterfaces>�.�(      <interface name="<<THIS.cClass>>">� �         <selectedMethods>��            <<lcMethods>>�!�         </selectedMethods>��      </interface>��   </selectedInterfaces> ��</WSDLGenConfig>��@-�C�f�P�CC��fC��
f	�CC��fC��f	�C'
	��
%�C4
��
��r����	��������������P��������������
��������������C��C��]���p
�U>�������������������������C���C��]���
F����ULCPREFS
LNSAVEAREALCPREFS2ILCPREFS3	LCMETHODSTHIS
CHECKWSDBFALERTCWSALIASAMETHODSTYPECOMFILECCOMFILECLASSCCLASSNAMEMENUPREFSPROJECTUSEPHOOK	TIMESTAMPUNIQUEIDCISENSECPROJECT	LUSEPHOOKG���T��CW��%�C��
�������C�OThe XML Web Service data file could not be updated. Make sure it is not in use.� (CC�M�����
FOXWS3.DBF�)����B�-���
F�����@-�C�f�P�CC��fC��f	�CC��fC��	f	�C'
	��%�C4
�CC�
����'�
F����B�-�����C�
���
F����U
LNSAVEAREATHIS
CHECKWSDBFALERTCWSALIASTYPECOMFILECCOMFILECLASSCCLASSPREFS���������
�����
T�����%��C�����O�B��4T��C�_typelibCC��	�����_utility.vcx���T��C�����
�������(������%�C�
���������T��C�
�����!����%�C����
�B�������(��C������&�����(�C�
��C��
�����'%�C�
�C�
��C��
������T���C�
��C����!������ULAINTSLNCOUNTILCGUIDJOTYPELIBPROJECTSCOUNTTHISCLASSLIBRARY
GETCLASSESCCOMFILECCLASSSERVERSCLSIDCPROJECTNAMEp��������������J���(�����T��	�a��T��
�-��������T������%�C������B�-���
T�����)T��C�MSSOAP.WSDLReader30������C������T��	�-��%���
���T��
�-��B�-�����C���
��+�a��i���C�������%�C����O��f�!��T�������
T�������C�����+�a��X���C�������%�C����O����!��T�����.����%�CCC������
��,����C������T���C�������
T������
T������UTCWSDL
LCSERVICEPORTLCWSDLOGENLOPORTLOENUMPORTS	LOSERVICELOENUMSERVICESTHIS
LIGNOREERRORS	LHADERRORAPORTSLOADGETSOAPSERVICESNEXTCWSNAMENAMEGETSOAPPORTSI	���������T��CC��ּ��
M(�`��<%@ LANGUAGE=VBScript %>��<%��Option Explicit��On Error Resume Next�'�!Response.ContentType = "text/xml"��Dim SoapServer�8�2If Not Application("<<lcWSName>>Initialized") Then��  Application.Lock�:�4  If Not Application("<<lcWSName>>Initialized") Then��    Dim WSDLFilePath��    Dim WSMLFilePath�5�/    WSDLFilePath = Server.MapPath("<<lcWSDL>>")�5�/    WSMLFilePath = Server.MapPath("<<lcWSML>>")�E�?    Set SoapServer = Server.CreateObject("MSSOAP.SoapServer30")�U�O    If Err Then SendFault "Cannot create SoapServer object. " & Err.Description�4�.    SoapServer.Init WSDLFilePath, WSMLFilePath�L�F    If Err Then SendFault "SoapServer.Init failed. " & Err.Description�7�1    Set Application("<<lcAppName>>") = SoapServer�7�1    Application("<<lcWSName>>Initialized") = True��  End If��  Application.UnLock��End If�3�-Set SoapServer = Application("<<lcAppName>>")�1�+SoapServer.SoapInvoke Request, Response, ""�N�HIf Err Then SendFault "SoapServer.SoapInvoke failed. " & Err.Description�%�Sub SendFault(ByVal LogMessage)��  Dim Serializer��  On Error Resume Next�E�?  ' "URI Query" logging must be enabled for AppendToLog to work�9�3  Response.AppendToLog " SOAP ERROR: " & LogMessage�G�A  Set Serializer = Server.CreateObject("MSSOAP.SoapSerializer30")��
  If Err Then�[�U    Response.AppendToLog "Could not create SoapSerializer object. " & Err.Description�7�1    Response.Status = "500 Internal Server Error"��  Else�"�    Serializer.Init Response��    If Err Then�Q�K      Response.AppendToLog "SoapSerializer.Init failed. " & Err.Description�9�3      Response.Status = "500 Internal Server Error"��    Else�$�      Serializer.startEnvelope� �      Serializer.startBody����      Serializer.startFault "Server", "The request could not be processed due to a problem in the server. Please contact the system admistrator. " & LogMessage��      Serializer.endFault��      Serializer.endBody�"�      Serializer.endEnvelope��      If Err Then�N�H        Response.AppendToLog "SoapSerializer failed. " & Err.Description�;�5        Response.Status = "500 Internal Server Error"��      End If��
    End If��  End If��  Response.End�
�End Sub��%>��	B����U	LCAPPNAMELCWSDLLCWSML	LCTEMPSTRLCWSNAME���������
M(�`��<%@ LANGUAGE=JScript %>��<%���*�$  Response.ContentType = "text/xml";��  �4�.  if( Application("<<lcAppName>>") == void 0 )�	�  {��  ��    Application.Lock();�6�0    if( Application("<<lcAppName>>") == void 0 )��    {�
�    ��      var SoapServer;��      var WSDLFilePath;��      var WSMLFilePath;��      �8�2      WSDLFilePath = Server.MapPath("<<lcWSDL>>");�8�2      WSMLFilePath = Server.MapPath("<<lcWSML>>");��      ��	      try�
�      {�F�@        SoapServer = Server.CreateObject("MSSOAP.SoapServer30");�
�      }��      catch(err)�
�      {�i�c        SendFault("Cannot create SoapServer object. " + err.description + " (" + err.number + ")");�
�      }�
�    ��	      try�
�      {�:�4        SoapServer.Init(WSDLFilePath, WSMLFilePath);�
�      }��      catch(err)�
�      {�F�@        SendFault("SoapServer.Init failed. " & err.description);�
�      }�
�    �6�0      Application("<<lcAppName>>") = SoapServer;��      ��    }��    Application.UnLock();�
�    �	�  }���2�,  SoapServer = Application("<<lcAppName>>");��  ��  try�	�  {�7�1    SoapServer.SoapInvoke(Request, Response, "");�	�  }��  catch(err)�	�  {�H�B    SendFault("SoapServer.SoapInvoke failed. " & err.description);�	�  }��  �&�   function SendFault(LogMessage)�	�  {�
�    ��    var Serializer;�
�    �H�B    // "URI Query" logging must be enabled for AppendToLog to work�
�    �=�7    Response.AppendToLog(" SOAP ERROR: " & LogMessage);�
�    �
�    try��    {�H�B      Serializer = Server.CreateObject("MSSOAP.SoapSerializer30");��    }��    catch(err)�
�    {  �_�Y      Response.AppendToLog("Could not create SoapSerializer object. " & err.description);�:�4      Response.Status = "500 Internal Server Error";��      Response.End();��    }���
�    try��	    {    �&�       Serializer.Init(Response);��    }��    catch(err)��    {�S�M      Response.AppendToLog("SoapSerializer.Init failed. " & err.description);�:�4      Response.Status = "500 Internal Server Error";��      Response.End();��    }���
�    try��    {      �1�+      Serializer.startEnvelope("", "", "");�%�      Serializer.startBody("");����      Serializer.startFault("Server", "The request could not be processed due to a problem in the server. Please contact the system admistrator. " + LogMessage, "");�"�      Serializer.endFault();�!�      Serializer.endBody();�%�      Serializer.endEnvelope();��    }��    catch(err)��    {�N�H      Response.AppendToLog("SoapSerializer failed. " & err.description);�:�4      Response.Status = "500 Internal Server Error";��      Response.End();��    }          ��      ��    Response.End();�
�    ��  }  ��  ��%>��	B����U	LCAPPNAMELCWSDLLCWSML	LCTEMPSTR0�������������
�����%�C����C�C����T�B�����T��C��\��T������T��C�
WScript.Shell�N��RT��C�>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSOAP\30\SOAPISAP\isapi����%�C�0�C����O	���(T��C��.wsdl�������������
H�B����������%�CٝThe Wizard has detected that your virtual directory is not setup to handle ISAPI listeners. Would you like to add a .WSDL application mapping to handle this?�$�x�������C����/T��C����.wsdl,��,1,GET,POST����C��
����C�
ScriptMaps���	��
��C��
����C�C�������%�C��The Wizard has detected that your virtual directory has a .WSDL application mapping pointing to an ISAPI listener that is not the default SOAP 3.0 Toolkit one. Would you like to change this mapping to use the SOAP 3.0 Toolkit ISAPI listener?�$�x����,T������.wsdl,��,1,GET,POST����C��
����C�
ScriptMaps���	��
��C��
������(��)���UTCVIRDIROVDIROBJOSHELLLCFILELNPOSLOERRLAMAPS
SCRIPTMAPSREGREADPUTSETINFOI#%�C���
�
C��W�	��4�
F�����Q��T����UTHISCWSALIASAINTS��������T���a��2%����C��Y������
�C����Z�B��
M(�`��
<<MESSAGE()>>����Location: <<THIS.Name>>�#�Number: <<TRANSFORM(nError)>>��Method: <<cMethod>>��Message: <<MESSAGE(1)>>� �Line: <<TRANSFORM(nline)>>��<<REPLICATE("_",30)>>�,�&Press OK to ignore error and continue.��Press Cancel to close.����:%�C��� XML Web Services Publisher Error�x����%�C�THISFORMb�O����<������<���
%��	��	���B�-���U
NERRORCMETHODNLINE
LCERRORMSGTHIS	LHADERROR
LIGNOREERRORS	STARTMODETHISFORMLUSINGWIZARDgenwsdl,��genasp��alert���createvirdirv��
addfoxcode
��vartypetostring$��
checkwsdbf���
getvirdirs� ��loopvirdirs5"��updateprefs�&��genws�)��autows/��getprefs�8��	saveprefs�9��	loadprefsgE��
getprojectG��getportsII��
getasp_vbstL��	getasp_js�U��checkvdirmap�a��Destroy]f��Error�f��1���!�qA�����qAA���qa����A�31���qA�qA�qA�qA��A��aa�Ra��3q���A3�2�������������!�A����A��B�3��q�q��QQ���qA��qAc�Q��AAQ���AA��q�AAAA��qA#�qA��qQAA�1�����A��A��qQAA��a��A����QqQAA�A���QQAqAA�A����qQAAC1A��A�AR���A1A1AA�q�A!QB���A�"	A�����A��A��3q�������������A3r��2AA������qA�AAAASa0�
�q��qA��!�A���Q�AAA�S3�����qAQ�a��qA3��������A�A�A!b��A�Q���A�1AqA��A�A�A�1!AAqA�BA3����qA!qA����������qSAAAA�A!A�3��1�q!!q!1q�QqAA�qAA�!!qA!!qA�!AqAq��qAA��AA�2���qAA���A#�AAA��A1�q!AA���Q��������qA����AA"�AbrB�BA1%��AA�������A�������A��a�1Q�A�qAA1B3�q��qA!�qA���qA�3���!qA���a�q��aq������a1Q����aQQQQaAr����Aaa�A��QAaa��Q�a��a!Q������aA���WA�2r�!qA���qA��3���bAAC�q�qAAA�AA�aq�AAAA3q�q����qA��A��qA�qQAA1��qQAA���A��A�A3��!���Q�qA�����QQQQA�qq���1�Qa�Q�q1�q�!Q��AQ
��!q��!�A��A�3�r���a��A���a�����������a�a��������a�a��a�����a!���q�!����a������������A�����a��a�A�1���a�Q�
!Q�A����Q������A�3qsq��AA��!���AA����A������AAA�C21�AA�2�q�!AA�1a�1�����aA��qA�qA�AAqA2�"I,@e�XG	�ah�*��*k.�C�.U4�sv46	�36�<��<�@Z��@�E�	�E�T�r�TNVL�nV�bb��b�d���d�g��g�l-�l�u7k�u�{�����3���"��D�*)�t�OPROCEDURE genwsdl
LOCAL loGen, loGen2, loDOM, lSuccess, lnSaveArea, lcXML
lSuccess = .T.
lnSaveArea = SELECT()
IF !THIS.CheckWSdbf()
	SELECT (lnSaveArea)
	RETURN .F.
ENDIF
SELECT (THIS.cWSAlias)
LOCATE FOR UPPER(TYPE)="P" AND ;
	UPPER(ALLTRIM(COMfile))== UPPER(THIS.cCOMFile) AND ;
	UPPER(ALLTRIM(Class)) == UPPER(THIS.cClass) AND !DELETED()
IF !FOUND() OR EMPTY(ALLTRIM(Menu))
	* Try again to save prefs
	THIS.Saveprefs()
	LOCATE FOR UPPER(TYPE)="P" AND ;
		UPPER(ALLTRIM(COMfile))== UPPER(THIS.cCOMFile) AND ;
		UPPER(ALLTRIM(Class)) == UPPER(THIS.cClass) AND !DELETED()
	IF !FOUND() OR EMPTY(ALLTRIM(Menu))
		SELECT (lnSaveArea)
		RETURN .F.
	ENDIF
ENDIF

lcXML = ALLTRIM(Menu)
SELECT (lnSaveArea)

TRY
	loGen=CREATEOBJECT(WSDLGEN_CLASS)
	loDOM=CREATEOBJECT(MSXML4_CLASS)
	loDOM.LoadXML(lcXML)
	loGen.Init(loDOM)
	loGen2=GETINTERFACE(loGen)
	loGen2.GenerateFile(0)
CATCH
	lSuccess = .F.
FINALLY
	THIS.Updateprefs("COMFILE", THIS.cCOMFile, .T.)	
ENDTRY

RETURN lSuccess

ENDPROC
PROCEDURE genasp
LPARAMETERS tcASP, tcWSDL, tcWSML, tcAppName

* Generates a listener ASP file (high-level) for web service
* Parameters:
* tcASP - name of ASP file
* tcWSDL - name of WSDL file
* tcWSML - name of WSDML file (optional - if not provided, then look for same name as WSDL)
* tcAppName - name of application for ASP

LOCAL lcFileStr, lcWSDL, lcWSML, lcAppName, lcSafety, lcASP

* Check for valid parms
IF EMPTY(tcASP) OR EMPTY(tcWSDL)
	THIS.Alert(INVALIDPARM_LOC)
	RETURN .F.
ENDIF
IF !FILE(tcWSDL)
	THIS.Alert(NOWSDLFILE_LOC)
	RETURN .F.
ENDIF
IF EMPTY(tcWSML)
	tcWSML = FORCEEXT(tcWSDL,"WSML")
ENDIF
IF !FILE(tcWSML)
	THIS.Alert(NOWSDLFILE_LOC)
	RETURN .F.
ENDIF
IF EMPTY(tcAppName)
	tcAppName = JUSTSTEM(tcWSDL)+"Server"
ENDIF
lcAppName = tcAppName
lcASP = tcASP
lcWSDL = SYS(2014,tcWSDL, lcASP)
lcWSML = SYS(2014,tcWSML, lcASP)

lcFileStr = IIF(THIS.lUseJScript, THIS.GetASP_JS(lcAppName, lcWSDL, lcWSML),THIS.GetASP_VBS(lcAppName, lcWSDL, lcWSML))

lcSafety = SET("SAFETY")
SET SAFETY OFF
STRTOFILE(lcFileStr,tcASP)
SET SAFETY &lcSafety.

ENDPROC
PROCEDURE alert
LPARAMETERS tcMessage
IF _VFP.StartMode#0 OR THIS.lSkipAlerts
	THIS.cErrorMessage = tcMessage
ELSE
	MESSAGEBOX(tcMessage,16)
ENDIF

ENDPROC
PROCEDURE createvirdir
LPARAMETERS tcNewVirDir, tcPath, tcParent

LOCAL oServObj, VdirObj, lHadError, lcParent
LOCAL laMaps, oShell, lcFile

TRY

	lcParent = IIF(EMPTY(tcParent), "IIS://LocalHost/w3svc/1/Root", tcParent)
	oServObj = GetObject(lcParent)
	VdirObj = oServObj.Create("IIsWebVirtualDir", tcNewVirDir)
	VdirObj.AccessRead = .F.
	VdirObj.AccessScript = .T.	&& required
	VdirObj.AccessExecute = .F.	&& can be set to .T., but is not needed (less secure)
	VdirObj.AspBufferingOn= .T.
	
	VdirObj.AppIsolated = 2		
	* 0 - Low (IIS Process), 1 - High (Isolated), 2 - Medium (Pooled)
	* Using 0 is best performance, but not as secure. By setting the Application Protection to 
	* 1 or 2, you will be running inside an instance of dllhost.exe process, which runs under 
	* a COM+ account (usually IWAM_MACHINENAME). And any error in your server COM dll   
	* will affect only web application related to the virtual root. Configuring the virtual directory 
	* to work under Low isolation level will run the web service within inetinfo.exe process 
	* running under system account. The only advantage of Low isolation level is performance.
	
	VdirObj.AspAllowSessionState = .F.
	VdirObj.ContentIndexed = .f.
	VdirObj.Put("Path", tcPath)
	VdirObj.AppCreate2(0)
	VdirObj.AppFriendlyName = tcNewVirDir
	VdirObj.SetInfo()

	* Add SOAP Toolkit 3.0 ISAPI Extension mapping
	laMaps = VdirObj.ScriptMaps
	oShell = CreateObject("WScript.Shell")
	lcFile = oShell.RegRead(ISAPIKEY)
	IF FILE(lcFile)
		DIMENSION laMaps[ALEN(laMaps)+1]
		laMaps[ALEN(laMaps)] = ".wsdl," + lcFile + ",1,GET,POST"
		COMARRAY(VdirObj,10)
		VdirObj.Put("ScriptMaps", @laMaps)
		VdirObj.SetInfo()
	ENDIF

CATCH

	lHadError=.T.

ENDTRY

RETURN !lHadError

ENDPROC
PROCEDURE addfoxcode
LPARAMETERS tcWSDL, tlRefresh, tcWSML

* Registers XML Web service for consumption in VFP
LOCAL i, j, lcMethodStr,lcTipsStr,lcTips2Str, lcWSMLGTM
LOCAL lcWSName,lcServicePort, lcService, lcPort, lcServiceDoc 
LOCAL lcWSDL,lcWSML,lcID,ldDateTime,lnSaveArea, loXMLDOM, lcClass
LOCAL oGen,loParts,loEnumParts,loMethod,loEnumMethods,loPort,loEnumPorts,loService,loEnumServices
LOCAL lcDocStr, lcDocXPath, loNodes, lcMethodStr2, lFailXPath, lcGetType 

STORE 0 TO loParts,loEnumParts,loMethod,loEnumMethods,loPort,loEnumPorts,loService,loEnumServices
STORE "" TO lcURI,cMethodStr,lcTipsStr
STORE "" TO lcWSDL_XML, lcWSML_XML, lcWSMLGTM

THIS.lISenseFailed = .F.
DIMENSION THIS.aPorts[1]
THIS.aPorts=""

lnSaveArea = SELECT()
IF EMPTY(tcWSDL)
	RETURN .F.
ENDIF

lcWSDL = tcWSDL
IF EMPTY(tcWSML)
	lcWSML = FORCEEXT(lcWSDL,"WSML")
ENDIF

* Load in class using XMLDOM Object
loXMLDOM = CREATEOBJECT(MSXML4_CLASS)
loXMLDOM.Async = .F.
IF loXMLDOM.load(lcWSML)
	lcWSML_XML = loXMLDOM.XML
	IF ATC("GenericCustomTypeMapper",lcWSML_XML)#0
		lcWSMLGTM=lcWSML
	ENDIF
ENDIF
IF loXMLDOM.load(lcWSDL)
	lcWSDL_XML = loXMLDOM.XML
	* Need to use XPATH to get Documentation properties
	TRY
		loXMLDOM.setProperty("SelectionNamespaces", [xmlns:wsdl="] + loXMLDOM.documentElement.namespaceURI + ["])
	CATCH
		lFailXPath = .T.
	ENDTRY
ENDIF

* Iterate thru all Services, Ports and Methods
oGen = CREATEOBJECTEX(WSDLREADER_CLASS,"","")

* Retry several times in case this is in use.
THIS.lIgnoreErrors = .T.
FOR i = 1 TO 3
	THIS.lHaderror = .F.
	oGen.Load(lcWSDL,"") 		&& should not assume that all web services have a WSML file.
	IF !THIS.lHadError
		EXIT
	ENDIF
ENDFOR
THIS.lIgnoreErrors = .F.
IF THIS.lHadError
	THIS.lHadError = .F.
	RETURN .F.
ENDIF

* Check Web Service table
IF !THIS.CheckWSdbf()
	SELECT (lnSaveArea)
	RETURN .F.
ENDIF
SELECT (THIS.cWSAlias)

* Get Service object
ogen.GetSoapServices(@loEnumServices)

DO WHILE .T.
	loEnumServices.Next(1,@loService,1)
	IF VARTYPE(loService)#"O"
		EXIT
	ENDIF
	
	lcServiceDoc = ""
	THIS.cWSname = loService.Name
	lcWSName = THIS.cWSname
	lcServiceDoc = loService.Documentation
	
	* Add WSDL record to WS table
	lcID = SYS(2015)
	ldDateTime = DATETIME()
	LOCATE FOR UPPER(ALLTRIM(Name))==UPPER(ALLTRIM(lcWSName)) AND UPPER(TYPE)="W" AND; 
		UPPER(ALLTRIM(URI))==UPPER(ALLTRIM(lcWSDL)) AND !DELETED()
		
	IF FOUND()
		IF tlRefresh
			REPLACE Name WITH lcWSName,	;
				URI WITH lcWSDL, ;
				WSDL WITH lcWSDL_XML, ;
				WSML WITH lcWSML_XML, ;
				Timestamp WITH ldDateTime, ;
				UniqueID WITH lcID
		ENDIF
	ELSE
		INSERT INTO (THIS.cWSAlias) ;
			(Type,Name,URI,WSDL,WSML,TimeStamp,UniqueID) ;
			VALUES("W",lcWSName,lcWSDL,lcWSDL_XML,lcWSML_XML,ldDateTime,lcID)
	ENDIF

	* Get ports
	loEnumPorts=0
	loService.GetSoapPorts(@loEnumPorts)
	DO WHILE .T.
		loEnumPorts.Next(1,@loPort,1)
		IF VARTYPE(loPort)#"O"
			EXIT
		ENDIF

		lcServicePort = loPort.name
		* Let's get class name -- typically it is same as port name, however
		* with SOAP Toolkit. Note: the class name is used primarily as 
		* friendly name for display purposes
		lcClass = lcServicePort
		DO CASE
		CASE ATC(".asmx?wsdl",lcWSDL)#0 AND UPPER(RIGHT(lcClass,4))="SOAP"  && VS .NET service
			lcClass = LEFT(lcClass,LEN(lcClass)-4)
		CASE UPPER(RIGHT(lcClass,8))="SOAPPORT"								&& SOAP3 Toolkit
			lcClass = LEFT(lcClass,LEN(lcClass)-8)
		ENDCASE

		lcTipsStr=""
		lcMethodStr=""
		lcMethodStr2=""

		* Get Methods
		loPort.GetSoapOperations(@loEnumMethods)
		DO WHILE .T.
			STORE 0 TO loMethod,loEnumParts,loParts
			loEnumMethods.Next(1,@loMethod,1)
			IF VARTYPE(loMethod)#"O"
				EXIT
			ENDIF
			* Get method name
			IF ATC("UpdateSingleTable", loMethod.Name)#0
			ENDIF
			lcMethodStr = lcMethodStr + loMethod.Name + CRLF
			
			* Get documentation if any (need to use XPATH since STK3 doesn't support this)
			lcDocStr=""
			TRY
				IF !lFailXPath
					lcDocXPath = "//wsdl:portType[@name='" + lcServicePort + "']/wsdl:operation[@name='" + loMethod.Name + "']/wsdl:documentation"
					loNodes = loXMLDOM.selectNodes(lcDocXPath)
					IF loNodes.Length>0
						lcDocStr = loNodes.item(0).text
					ENDIF
				ENDIF
			CATCH
			ENDTRY
			lcMethodStr2 = lcMethodStr2 + loMethod.Name + " " + lcDocStr + CRLF
			
			loMethod.GetOperationParts(@loEnumParts)
			lcTips2Str = ""
			lcRetType = "VOID"
			DO WHILE .T.
				* Get parms
				loParts = 0
				loEnumParts.Next(1,@loParts,1)
				IF VARTYPE(loParts)#"O"
					EXIT
				ENDIF			

				* Check if parameter or return type is complex object
				IF EMPTY(loParts.elementType) AND VARTYPE(loParts.SchemaNode)="O"
					IF ATC(":schema", loparts.SchemaNode.xml)#0
						lcGetType = "Dataset"
					ELSE
						lcGetType = "XMLDOMNodeList"
					ENDIF
				ELSE
					lcGetType = loParts.elementType	
				ENDIF

				IF loParts.parameterOrder = -1  &&check for return value
					lcRetType = lcGetType 
				ELSE
					lcTips2Str = lcTips2Str + loParts.elementName + " AS "
					lcTips2Str = lcTips2Str + lcGetType
					IF loParts.IsInput = 1	&&byref call
						lcTips2Str = lcTips2Str + " @"
					ENDIF
					lcTips2Str = lcTips2Str + ", "
				ENDIF
			ENDDO
			lcTips2Str=ALLTRIM(lcTips2Str)
			IF RIGHT(lcTips2Str,1)=","
				lcTips2Str = SUBSTR(lcTips2Str,1,LEN(lcTips2Str)-1)
			ENDIF
			lcTipsStr = lcTipsStr + loMethod.Name + "(" + lcTips2Str + ")"
			lcTipsStr = lcTipsStr + " AS " + lcRetType + CRLF

		ENDDO	&&SoapOperations (Methods)

		* Add Class record to WS table
		lcID = SYS(2015)
		ldDateTime = DATETIME()

		LOCATE FOR UPPER(ALLTRIM(Name))==UPPER(ALLTRIM(lcWSName)) AND UPPER(TYPE)="C" AND ; 
			UPPER(ALLTRIM(URI))==UPPER(ALLTRIM(lcWSDL)) AND ;
			UPPER(ALLTRIM(Port))==UPPER(ALLTRIM(lcServicePort)) AND !DELETED()
		IF FOUND()
			IF tlRefresh
				REPLACE Name WITH lcWSName,	 ;
					Menu WITH lcMethodStr, ;
					Tips WITH lcTipsStr, ;
					URI WITH lcWSDL, ;
					WSML WITH lcWSMLGTM, ;
					Class WITH lcClass, ;
					Port WITH lcServicePort, ;
					Timestamp WITH ldDateTime, ;
					UniqueID WITH lcID,;
					Comfile WITH lcServiceDoc,;
					Prefs WITH lcMethodStr2 
			ENDIF
		ELSE
			INSERT INTO (THIS.cWSAlias) (Type, Name, Menu, Tips, URI, WSML, Class, Port, TimeStamp, UniqueID, Toolbox, Comfile, Prefs);
				VALUES("C", lcWSName, lcMethodStr, lcTipsStr, lcWSDL, lcWSMLGTM, lcClass, lcServicePort, ldDateTime, lcID, .T., lcServiceDoc, lcMethodStr2)
		ENDIF
		loEnumParts = 0
		loParts = 0
		loEnumMethods = 0
		loMethod = 0
		loPort = 0
	ENDDO	&&Ports
	loEnumPorts = 0
	loService = 0
ENDDO	&&Service

* Write out preferences
THIS.Updateprefs("MENU",lcWSName,.T.)

SELECT (lnSaveArea)

ENDPROC
PROCEDURE vartypetostring
LPARAMETERS nType

DO CASE
CASE ntype = 0		&& VT_EMPTY
	RETURN "variant"
CASE ntype = 1		&& VT_NULL
	RETURN "NULL"
CASE ntype = 2		&& VT_I2
	RETURN "integer"
CASE nType = 3		&& VT_I4
	RETURN "integer"
CASE nType = 4		&& VT_R4
	RETURN "number"
CASE nType = 5		&& VT_R8
	RETURN "double"
CASE nType = 6		&& VT_CT
	RETURN "currency"
CASE ntype = 7
	RETURN "date"
CASE ntype = 8
	RETURN "string"
CASE ntype = 9		&& VT_DISPATCH
	RETURN "VARIANT"
CASE nType = 11
	RETURN "boolean"
CASE nType = 12		&& VT_VARIANT
	RETURN "variant"
CASE nType = 16 	&& VT_I1
	RETURN "number"
CASE nType = 17 	&& VT_UI1
	RETURN "number"
CASE nType = 18 	&& VT_UI2
	RETURN "number"
CASE nType = 19 	&& VT_UI4
	RETURN "number"
CASE nType = 22		&& VT_INT
	RETURN "integer"
CASE nType = 23		&& VT_UINT
	RETURN "integer"
CASE nType = 24		&& VT_VOID
	RETURN "VOID"
CASE nType = 25		&& VT_HRESULT
	RETURN "VOID"
OTHERWISE
	RETURN "variant"
ENDCASE

ENDPROC
PROCEDURE checkwsdbf
* Add WS record to WS table
LOCAL lcVFPWSDBF, lSafety, lnSaveArea, lcHomeFoxCode, lnFoxCodeVer

lnFoxCodeVer=1
lnSaveArea = SELECT()

IF !EMPTY(THIS.cWSAlias) AND SELECT(THIS.cWSAlias)#0
	RETURN
ENDIF
lcVFPWSDBF = ADDBS(JUSTPATH(_FOXCODE)) + FOXWSDBF
SELECT 0
IF FILE(lcVFPWSDBF)
	USE (lcVFPWSDBF) SHARED AGAIN
	IF THIS.lHadError OR EMPTY(ALIAS())
		THIS.lHadError = .F.
		SELECT (lnSaveArea)
		RETURN .F.
	ENDIF
	* Check for valid format (allow for users to add extra fields
	IF FCOUNT() >= 15
		THIS.cWSAlias = ALIAS()
		RETURN
	ENDIF
	USE
ENDIF

* First time or bad format
lSafety = SET("Safety")
SET SAFETY OFF

CREATE TABLE (lcVFPWSDBF) (;
    TYPE c(1),;
    Name m,;
    Menu m,;
    Tips m,;
    URI m,;
    WSDL m,;
    WSML m,;
    Prefs m,;
    COMFile m,;
    ASPFile m,;
    Project m,;
    UsePHook l,;
    Toolbox l,;
    Class m,;
    Port m,;
    Timestamp t,;
    UniqueID c(10),;
    User m )

USE (lcVFPWSDBF) SHARED AGAIN
SET SAFETY &lSafety
 
IF EMPTY(ALIAS())
	SELECT (lnSaveArea)
	RETURN .F.
ENDIF
THIS.cWSAlias = ALIAS()

SELECT 0
lcHomeFoxCode =ADDBS(HOME(1))+"foxcode.dbf"
IF !FILE(lcHomeFoxCode)
	lcHomeFoxCode = HOME()+"foxcode.dbf"
ENDIF
IF FILE(lcHomeFoxCode)
	USE (lcHomeFoxCode) AGAIN SHARED
	IF !EMPTY(ALIAS())
		GO TOP
		lnFoxCodeVer = VAL(expanded)
	ENDIF
	USE
ENDIF

SELECT (THIS.cWSAlias)

INSERT INTO (lcVFPWSDBF) (type,name) ;
	VALUES("V",TRANSFORM(lnFoxCodeVer))

ENDPROC
PROCEDURE getvirdirs
LOCAL oServObj, lcMachine, lcVirDir
THIS.lignoreerrors=.T.
oServObj= GetObject("IIS://localhost")
THIS.lignoreerrors=.F.
IF THIS.lhaderror
	THIS.lhaderror=.F.
	RETURN .F.
ENDIF
lcMachine = GETWORDNUM(SYS(0),1)
lcVirDir="http://"+lcMachine+"/"
DIMENSION THIS.aVirDirs[1,2]
STORE "" TO THIS.aVirDirs
THIS.LoopVirDirs(oServObj, lcVirDir, 1)
IF THIS.lhaderror
	THIS.lhaderror=.F.
	RETURN .F.
ENDIF

ENDPROC
PROCEDURE loopvirdirs
LPARAMETERS oParent, tcVirDir, tnLevel
LOCAL nLevel, cVirDir, oChild, loTmpParent, loTmpChild, lcPath, lAddVDir
cVirDir = tcVirDir

FOR EACH oChild IN oParent
	lAddVDir=.F.
	IF INLIST(UPPER(oChild.class),"IISWEBSERVICE","IISWEBSERVER", "IISWEBVIRTUALDIR", "IISWEBDIRECTORY")

		DO CASE
		CASE INLIST(UPPER(oChild.Name),"IISADMIN","IISHELP","PRINTERS","MSADC")
			LOOP
		CASE ATC("_vti_", oChild.Name)#0
			LOOP
		CASE ATC(".",oChild.Name)#0
			LOOP
		CASE oChild.AccessScript=.F.
			* LOOP
		CASE UPPER(oChild.class)="IISWEBVIRTUALDIR"
			* skip for certain common ones
			IF !UPPER(oChild.Name)=="ROOT"
				cVirDir = tcVirDir + oChild.name + "/"
			ENDIF
			lcPath = oChild.Path
			lAddVDir=.T.			
		CASE UPPER(oChild.class)="IISWEBDIRECTORY"
			* VS uses web directories which are directories off of the parent. They do not
			* have a path so we need to traverse up to get paret on.
			lcPath = oChild.Name
			loTmpChild=oChild
			IF !UPPER(oChild.Name)=="ROOT"
				cVirDir = tcVirDir + oChild.name + "/"
			ENDIF
			DO WHILE .T.				
				loTmpParent = GETOBJECT(loTmpChild.Parent)
				IF TYPE("loTmpParent.Path")="C"
					lcPath = ADDBS(loTmpParent.Path)+lcPath
					EXIT
				ELSE
					lcPath = loTmpParent.Name + "\" + lcPath	
				ENDIF
				loTmpChild=loTmpParent
			ENDDO
			lAddVDir=.T.
		ENDCASE

		IF lAddVDir
			IF !EMPTY(THIS.aVirDirs)
				DIMENSION THIS.aVirDirs[ALEN(THIS.aVirDirs,1)+1,2]
			ENDIF
			THIS.aVirDirs[ALEN(THIS.aVirDirs,1),1] = cVirDir
			THIS.aVirDirs[ALEN(THIS.aVirDirs,1),2] = ADDBS(lcPath)
		ENDIF
		
		nLevel = tnLevel +1
		THIS.LoopVirDirs(oChild, cVirDir, nLevel)

	ENDIF
ENDFOR

ENDPROC
PROCEDURE updateprefs
LPARAMETERS tcField, tcValue, tlAppend

* Updates the Version record with default prefs
LOCAL laItems, lnCount, i, lcTmpStr, lIsFile, lnSaveArea
lnSaveArea=SELECT()
IF EMPTY(tcField) OR EMPTY(tcValue)
	RETURN .F.
ENDIF
IF !THIS.CheckWSdbf()
	THIS.Alert(FILENOTOPEN_LOC + " ("+ ADDBS(JUSTPATH(_FOXCODE)) + FOXWSDBF + ")")
	RETURN .F.
ENDIF
SELECT (THIS.cWSAlias)
LOCATE FOR UPPER(TYPE)="V" AND !DELETED()
IF !FOUND()
	INSERT INTO (THIS.cWSAlias) (type,name,&tcField.) ;
		VALUES("V","1",tcValue)
ELSE
	IF tlAppend
		DIMENSION laItems[1]
		lnCount = ALINES(laItems, &tcField.)
		lcTmpStr = ALLTRIM(tcValue)
		lIsFile = FILE(tcValue)
		FOR i = 1 TO lnCount
			IF EMPTY(laItems[m.i]) OR ;
				(lIsFile AND !FILE(laItems[m.i])) OR;
				UPPER(laItems[m.i]) == UPPER(tcValue)
				LOOP
			ENDIF
			lcTmpStr = lcTmpStr + CRLF + laItems[m.i]
		ENDFOR
		tcValue = lcTmpStr
	ENDIF
	REPLACE &tcField. WITH tcValue
ENDIF
SELECT (lnSaveArea)

ENDPROC
PROCEDURE genws
LOCAL lcWSMLFile, lResult, lcListener

* Generate WSDL/WSML files
IF THIS.lGenWSDL

	DO CASE
	CASE !FILE(THIS.cCOMFile)
		THIS.Alert(NODLL_LOC)
		RETURN .F.
	CASE EMPTY(THIS.cWSDLFile)
		THIS.Alert(NOWSDL_LOC)
		RETURN .F.
	CASE EMPTY(THIS.cClass)
		THIS.Alert(NOCLASS_LOC)
		RETURN .F.
	CASE !THIS.lUseIsapi AND EMPTY(THIS.cASPListener)
		THIS.Alert(NOURL_LOC)
		RETURN .F.
	ENDCASE
	lcListener = IIF(THIS.lUseIsapi, THIS.cWSDLListener, THIS.cASPListener)

	lResult = THIS.GenWSDL()
	IF !lResult
		THIS.Alert(NOGENFILE_LOC+WSDLFILES_LOC)
		RETURN .F.
	ENDIF
ENDIF

* Generate ASP files
IF !THIS.lUseIsapi AND THIS.lGenASP
	IF EMPTY(THIS.cASPFile)
		THIS.Alert(NOASP_LOC)
		RETURN .F.
	ENDIF
	IF EMPTY(THIS.cWSDLFile)
		THIS.Alert(NOWSDL_LOC)
		RETURN .F.
	ENDIF
	lcWSMLFile = FORCEEXT(THIS.cWSDLFile,"WSML")
	IF EMPTY(THIS.cAppName)
		THIS.Alert(NOAPPNAME_LOC)
		RETURN .F.
	ENDIF
	lResult = THIS.GenASP(THIS.cASPFile, THIS.cWSDLFile, lcWSMLFile, THIS.cAppName)
	IF !lResult
		THIS.Alert(NOGENFILE_LOC+ASPFILES_LOC)
		RETURN .F.
	ENDIF
ENDIF

* Register XML Web service - for use with IntelliSense too
IF THIS.lGenIntellisense
	IF !THIS.AddFoxCode(THIS.cWSDLListener, .T.)
		THIS.lISenseFailed=.T.
	ENDIF
ENDIF

THIS.SavePrefs()
ENDPROC
PROCEDURE autows
LPARAMETERS tcCOMFile, tcClass

PRIVATE lcRetVal,lcRetVal2

LOCAL lRetval, lnPos, loConfig, lcName, lcDefPath, lcName2
LOCAL oTypelib, i, lnCount, laMethods, lcDefURI

IF THIS.lPrefsLoaded
	RETURN
ENDIF

THIS.cClass = tcClass
THIS.cCOMFile = tcCOMFile

* Try to load prefs
THIS.lPrefsExist = .F.
IF THIS.LoadPrefs()
	THIS.lPrefsExist = .T.
	THIS.lPrefsLoaded = .T.
ENDIF

* Try to find project
IF EMPTY(THIS.cProject)
	THIS.GetProject()
ENDIF

IF THIS.lPrefsLoaded
	RETURN
ENDIF

* Get methods
DIMENSION laMethods[1]
lnCount = 0
oTypelib = NEWOBJECT("_typelib", ADDBS(JUSTPATH(THIS.ClassLibrary))+"_utility.vcx")
oTypelib.cTypelib = THIS.cCOMFile
lnCount = oTypelib.GetMethods(@laMethods, THIS.cClass,.F. ,.F. ,.T.)
IF lnCount > 0
	DIMENSION THIS.aMethods[lnCount]
	FOR i = 1 TO lnCount
		THIS.aMethods[m.i] = laMethods[m.i,1]
	ENDFOR
ENDIF

* Get URI locations
lcDefURI = THIS.cDeflocation
lcDefPath=""

IF EMPTY(lcDefURI)
	lRetval = THIS.GetPrefs("URI",@lcDefURI)
	IF !lRetval OR EMPTY(lcDefURI) OR ALLTRIM(lcDefURI)="*"
		* No default location selected, so prompt for one:
		lcRetval=""
		lcRetval2=""
		loConfig = NEWOBJECT("wsconfig",THIS.ClassLibrary,"","lcRetVal","lcRetVal2")
		loConfig.lDefaultMode = .F.
		loConfig.Show()
		lcDefURI = ALLTRIM(lcRetVal)
		lcDefPath = ALLTRIM(lcRetVal2)
		IF EMPTY(lcDefURI)
			RETURN .F.
		ENDIF
		* Need to recreate aVirDirs
		THIS.GetVirDirs()
	ELSE
		lcDefPath =  ALLTRIM(GETWORDNUM(lcDefURI, 2, CHR(13)))
		lcDefURI	 =  ALLTRIM(GETWORDNUM(lcDefURI, 1, CHR(13)))
	ENDIF
ENDIF

IF EMPTY(THIS.aVirDirs)
	THIS.GetVirDirs()
ENDIF

lnPos = ASCAN(THIS.aVirDirs,lcDefURI)
IF lnPos = 0
	* Check for Localhost in default URI
	IF ATC("http://localhost/",lcDefURI)#0
		lnPos = ASCAN(THIS.aVirDirs, "http://" + ALLTRIM(GETWORDNUM(SYS(0),1)) + ;
			"/" + STREXTRACT(lcDefURI,"http://localhost/","",1,1))
	ELSE
		* User specified a different location and path.
	ENDIF
ENDIF

* Determine name here
lcName = JUSTSTEM(tcCOMFile)
IF !EMPTY(THIS.cClass)
	* Specify default naming convention for filenames. You usually want to avoid 
	* using long names since the naming convention is <<Server>> + "_" + <<Class>>. 
	* This is essentially the same as the ProgID which is hidden in the WSML file for
	* security purposes.
	IF VARTYPE(THIS.lUseLongtName)="L" AND THIS.lUseLongtName
		lcName = JUSTSTEM(tcCOMFile)+"_"+THIS.cClass
	ELSE
		lcName = THIS.cClass
	ENDIF
ENDIF

THIS.lPrefsLoaded = .T.

* Set defaults
THIS.lGenWSDL = .T.
THIS.lUseIsapi = .T.
THIS.lGenASP = .T.
THIS.lGenIntelliSense = .T.
IF VAL(OS(3))=4 AND INLIST(VAL(OS(4)),10,90)
	THIS.lGenIntelliSense = .F.
ENDIF
lcName2 = CHRTRAN(lcName," 	","_")   &&avoid URL names with space, tabs
THIS.cASPListener = lcDefURI + lcName2 + ".ASP"
THIS.cWSDLListener = lcDefURI + lcName2 + ".WSDL"
IF lnPos=0
	*Could not find VDir on local machine so use specified one.
	THIS.cWSDLfile = ADDBS(lcDefPath) + lcName2 + ".WSDL"
	THIS.cASPfile = ADDBS(lcDefPath) + lcName2 + ".ASP"
ELSE
	THIS.cWSDLfile = ADDBS(THIS.aVirDirs[lnPos+1]) + lcName2 + ".WSDL"
	THIS.cASPfile = ADDBS(THIS.aVirDirs[lnPos+1]) + lcName2 + ".ASP"
ENDIF
THIS.cAppName = lcName + APPNAME_SUFFIX
THIS.lUseJScript = .F.
THIS.cService = JUSTSTEM(THIS.cWSDLfile)

* Limit to 24 chars (FOXCODE field)
DO CASE
CASE LEN(lcName) > 21
	THIS.cISense = LEFT(lcName,24)
CASE LEN(lcName) + LEN(WS_LOC) + 1 <= 24
	THIS.cISense = lcName + " " + WS_LOC
OTHERWISE
	THIS.cISense = lcName + "_WS"
ENDCASE

* Get Namespaces
THIS.cURI1 = "http://tempuri.org/" + lcName + "/wsdl/"
THIS.cURI2 = "http://tempuri.org/" + lcName + "/type/"
THIS.cURI3 = "http://tempuri.org/" + lcName + "/message/"
THIS.cURI4 = "http://tempuri.org/" + lcName + "/action/"

RETURN

ENDPROC
PROCEDURE getprefs
LPARAMETERS tcField, tcValue
LOCAL lnSaveArea
lnSaveArea = SELECT()
* Gets a default pref
IF EMPTY(tcField)
	RETURN .F.
ENDIF
IF !THIS.CheckWSdbf()
	THIS.lhaderror = .T.
	RETURN .F.
ENDIF
SELECT (THIS.cWSAlias)
LOCATE FOR UPPER(TYPE)="V"
IF !FOUND()
	SELECT (lnSaveArea)
	RETURN .F.
ENDIF
tcValue = ALLTRIM(&tcField.)
SELECT (lnSaveArea)

ENDPROC
PROCEDURE saveprefs
* Save project DLL prefs
LOCAL lcPrefs, lnSaveArea, lcPrefs2, i, lcPrefs3, lcMethods
lcPrefs2=""
lnSaveArea=SELECT()
IF !THIS.CheckWSdbf()
	THIS.Alert(FILENOTOPEN_LOC + " ("+ ADDBS(JUSTPATH(_FOXCODE)) + FOXWSDBF + ")")
	RETURN .F.
ENDIF
SELECT (THIS.cWSAlias)

TEXT TO lcPrefs TEXTMERGE NOSHOW
LPARAMETERS toWebS

toWebS.cCOMFile = [<<THIS.cCOMFile>>]
toWebS.cClass = [<<THIS.cClass>>]
toWebS.cProject = [<<THIS.cProject>>]
toWebS.cService = [<<THIS.cService>>]

toWebS.lGenASP = <<THIS.lGenASP>>
toWebS.lGenWSDL = <<THIS.lGenWSDL>>
toWebS.lGenIntelliSense = <<THIS.lGenIntelliSense>>
toWebS.lUsePHook = <<THIS.lUsePHook>>
toWebS.lUnicode = <<THIS.lUnicode>>
toWebS.lUseIsapi = <<THIS.lUseIsapi>>
toWebS.lUseJScript = <<THIS.lUseJScript>>

toWebS.cASPListener = [<<THIS.cASPListener>>]
toWebS.cWSDLListener = [<<THIS.cWSDLListener>>]
toWebS.cASPfile = [<<THIS.cASPfile>>]
toWebS.cWSDLfile = [<<THIS.cWSDLfile>>]
toWebS.cAppName = [<<THIS.cAppName>>]
toWebS.cISense = [<<THIS.cISense>>]

toWebS.cURI1 = [<<THIS.cURI1>>]
toWebS.cURI2 = [<<THIS.cURI2>>]
toWebS.cURI3 = [<<THIS.cURI3>>]
toWebS.cURI4 = [<<THIS.cURI4>>]

ENDTEXT

IF !EMPTY(THIS.aMethods[1])
	SET TEXTMERGE ON TO MEMVAR lcPrefs2 NOSHOW
	\DIMENSION toWebS.aMethods[<<ALEN(THIS.amethods)>>]
	FOR i = 1 TO ALEN(THIS.amethods)
		\toWebS.aMethods[<<m.i>>] = "<<THIS.aMethods[m.i]>>"
	ENDFOR
	SET TEXTMERGE OFF
	SET TEXTMERGE TO
	lcPrefs = lcPrefs + CRLF + lcPrefs2
ENDIF

SET TEXTMERGE ON TO MEMVAR lcMethods NOSHOW
FOR i = 1 TO ALEN(THIS.aMethods)
	\<<IIF(m.i=1,"",REPLICATE(" ",12))>><method name="<<THIS.aMethods[m.i]>>">	
	\<<REPLICATE(" ",12)>></method>
ENDFOR
SET TEXTMERGE TO
SET TEXTMERGE OFF

*serviceName="<<JUSTSTEM(THIS.cWSDLfile)>>"

TEXT TO lcPrefs3 TEXTMERGE NOSHOW
<WSDLGenConfig WSDLGenVersion="3.0" 
serviceName="<<THIS.cService>>"
COMObjectPath="<<THIS.cCOMFile>>" 
listenerURI="<<JUSTPATH(THIS.cWSDLListener)>>/" 
listenerType="<<IIF(THIS.lUseIsapi,[ISAPI],[ASP])>>" 
XSDSchemaNS="2001" 
definitionsTNS="<<THIS.cURI1>>" 
schemaTNS="<<THIS.cURI2>>" 
soapBodyNS="<<THIS.cURI3>>" 
soapActionURI="<<THIS.cURI4>>" 
characterSet="<<IIF(THIS.lUnicode,[UTF-16],[UTF-8])>>" 
outputPath="<<JUSTPATH(THIS.cWSDLfile)>>" >
   <selectedInterfaces>
      <interface name="<<THIS.cClass>>">
         <selectedMethods>
            <<lcMethods>>
         </selectedMethods>
      </interface>
   </selectedInterfaces> 
</WSDLGenConfig>
ENDTEXT

LOCATE FOR UPPER(TYPE)="P" AND ;
	UPPER(ALLTRIM(COMfile))== UPPER(THIS.cCOMFile) AND ;
	UPPER(ALLTRIM(Class)) == UPPER(THIS.cClass) AND !DELETED()

IF !FOUND()
	INSERT INTO (THIS.cWSAlias) (Type,Name,Menu,Prefs,Comfile,Class,Project,UsePHook,Timestamp,UniqueID) ;
		VALUES("P",THIS.cISense,lcPrefs3,lcPrefs,THIS.cCOMFile,THIS.cClass,THIS.cProject,THIS.lUsePHook,DATETIME(),SYS(2015))
ELSE
	REPLACE Prefs WITH lcPrefs,;
		Menu WITH lcPrefs3, ;
		Name WITH THIS.cISense, ;
		Project WITH THIS.cProject, ;
		UsePHook WITH THIS.lUsePHook, ;
		Timestamp WITH DATETIME(), ;
		UniqueID WITH SYS(2015)
ENDIF

SELECT (lnSaveArea)
ENDPROC
PROCEDURE loadprefs
* Load project DLL prefs
LOCAL lnSaveArea
lnSaveArea = SELECT()
IF !THIS.CheckWSdbf()
	THIS.Alert(FILENOTOPEN_LOC + " ("+ ADDBS(JUSTPATH(_FOXCODE)) + FOXWSDBF + ")")
	RETURN .F.
ENDIF
SELECT (THIS.cWSAlias)
LOCATE FOR UPPER(TYPE)="P" AND ;
	UPPER(ALLTRIM(COMfile))== UPPER(THIS.cCOMFile) AND ;
	UPPER(ALLTRIM(Class)) == UPPER(THIS.cClass) AND !DELETED()

IF !FOUND() OR EMPTY(ALLTRIM(prefs))
	SELECT (lnSaveArea)
	RETURN .F.
ENDI
EXECSCRIPT(prefs,THIS)
SELECT (lnSaveArea)

ENDPROC
PROCEDURE getproject
* Checks to find if project for web service is opened.
LOCAL laInts, lnCount, i, lcGuid, j, oTypelib 
DIMENSION laInts[1]
lcGuid=""

IF _VFP.Projects.Count = 0
	RETURN
ENDIF

* Try to find and set project
oTypelib = NEWOBJECT("_typelib", ADDBS(JUSTPATH(THIS.ClassLibrary))+"_utility.vcx")
lnCount = oTypelib.Getclasses(@laInts,THIS.cComfile)
FOR i = 1 TO lnCount
	IF laInts[m.i,1]==THIS.cClass
		lcGuid = laInts[m.i,2]
		EXIT
	ENDIF
ENDFOR

IF EMPTY(lcGuid)
	RETURN
ENDIF

FOR i = 1 TO _VFP.Projects.Count
	FOR j = 1 TO _VFP.Projects(m.i).Servers.Count
		IF _VFP.Projects(m.i).Servers(m.j).CLSID=lcGuid
			THIS.cProject = _VFP.Projects(m.i).Name
			EXIT
		ENDIF
	ENDFOR
ENDFOR

ENDPROC
PROCEDURE getports
LPARAMETERS tcWSDL

* VFP7 Intellisense support for Web Service
LOCAL lcServicePort,lcWSDL
LOCAL oGen,loPort,loEnumPorts,loService,loEnumServices
STORE 0 TO loPort,loEnumPorts,loService,loEnumServices
THIS.lIgnoreErrors = .T.
THIS.lHaderror = .F.
DIMENSION THIS.aPorts[1]
THIS.aPorts=""

IF EMPTY(tcWSDL)
	RETURN .F.
ENDIF
lcWSDL = tcWSDL

* Iterate thru all Services, Ports and Methods
oGen = CREATEOBJECTEX(WSDLREADER_CLASS,"","")
oGen.Load(lcWSDL,"") 		&& should not assume that all web services have a WSML file.

THIS.lIgnoreErrors = .F.
IF THIS.lHadError
	THIS.lHadError = .F.
	RETURN .F.
ENDIF

* Get Services
ogen.GetSoapServices(@loEnumServices)
DO WHILE .T.
	loEnumServices.next(1,@loService,1)
	IF VARTYPE(loService)#"O"
		EXIT
	ENDIF
	THIS.cWSname=loService.Name
	* Get ports
	loEnumPorts=0
	loService.GetSoapPorts(@loEnumPorts)
	DO WHILE .T.
		loEnumPorts.Next(1,@loPort,1)
		IF VARTYPE(loPort)#"O"
			EXIT
		ENDIF
		lcServicePort = loService.name+"."+loPort.name
		IF !EMPTY(THIS.aPorts[ALEN(THIS.aPorts)])
			DIMENSION THIS.aPorts[ALEN(THIS.aPorts)+1]
		ENDIF
		THIS.aPorts[ALEN(THIS.aPorts)]= lcServicePort
		loPort = 0
	ENDDO	&&Ports
	loService = 0
ENDDO	&&Services

ENDPROC
PROCEDURE getasp_vbs
LPARAMETERS lcAppName, lcWSDL, lcWSML

LOCAL lcTempStr,lcWSName
lcWSName = PROPER(JUSTSTEM(lcWSDL))

* Begin textmerge here
TEXT TO lcTempStr NOSHOW TEXTMERGE
<%@ LANGUAGE=VBScript %>
<%
Option Explicit
On Error Resume Next
Response.ContentType = "text/xml"
Dim SoapServer
If Not Application("<<lcWSName>>Initialized") Then
  Application.Lock
  If Not Application("<<lcWSName>>Initialized") Then
    Dim WSDLFilePath
    Dim WSMLFilePath
    WSDLFilePath = Server.MapPath("<<lcWSDL>>")
    WSMLFilePath = Server.MapPath("<<lcWSML>>")
    Set SoapServer = Server.CreateObject(SOAPSERVER_CLASS)
    If Err Then SendFault "Cannot create SoapServer object. " & Err.Description
    SoapServer.Init WSDLFilePath, WSMLFilePath
    If Err Then SendFault "SoapServer.Init failed. " & Err.Description
    Set Application("<<lcAppName>>") = SoapServer
    Application("<<lcWSName>>Initialized") = True
  End If
  Application.UnLock
End If
Set SoapServer = Application("<<lcAppName>>")
SoapServer.SoapInvoke Request, Response, ""
If Err Then SendFault "SoapServer.SoapInvoke failed. " & Err.Description
Sub SendFault(ByVal LogMessage)
  Dim Serializer
  On Error Resume Next
  ' "URI Query" logging must be enabled for AppendToLog to work
  Response.AppendToLog " SOAP ERROR: " & LogMessage
  Set Serializer = Server.CreateObject(SOAPSERIAL_CLASS)
  If Err Then
    Response.AppendToLog "Could not create SoapSerializer object. " & Err.Description
    Response.Status = "500 Internal Server Error"
  Else
    Serializer.Init Response
    If Err Then
      Response.AppendToLog "SoapSerializer.Init failed. " & Err.Description
      Response.Status = "500 Internal Server Error"
    Else
      Serializer.startEnvelope
      Serializer.startBody
      Serializer.startFault "Server", "The request could not be processed due to a problem in the server. Please contact the system admistrator. " & LogMessage
      Serializer.endFault
      Serializer.endBody
      Serializer.endEnvelope
      If Err Then
        Response.AppendToLog "SoapSerializer failed. " & Err.Description
        Response.Status = "500 Internal Server Error"
      End If
    End If
  End If
  Response.End
End Sub
%>
ENDTEXT

RETURN lcTempStr

ENDPROC
PROCEDURE getasp_js
LPARAMETERS lcAppName, lcWSDL, lcWSML

LOCAL lcTempStr

* Begin textmerge here
TEXT TO lcTempStr NOSHOW TEXTMERGE
<%@ LANGUAGE=JScript %>
<%

  Response.ContentType = "text/xml";
  
  if( Application("<<lcAppName>>") == void 0 )
  {
  
    Application.Lock();
    if( Application("<<lcAppName>>") == void 0 )
    {
    
      var SoapServer;
      var WSDLFilePath;
      var WSMLFilePath;
      
      WSDLFilePath = Server.MapPath("<<lcWSDL>>");
      WSMLFilePath = Server.MapPath("<<lcWSML>>");
      
      try
      {
        SoapServer = Server.CreateObject(SOAPSERVER_CLASS);
      }
      catch(err)
      {
        SendFault("Cannot create SoapServer object. " + err.description + " (" + err.number + ")");
      }
    
      try
      {
        SoapServer.Init(WSDLFilePath, WSMLFilePath);
      }
      catch(err)
      {
        SendFault("SoapServer.Init failed. " & err.description);
      }
    
      Application("<<lcAppName>>") = SoapServer;
      
    }
    Application.UnLock();
    
  }

  SoapServer = Application("<<lcAppName>>");
  
  try
  {
    SoapServer.SoapInvoke(Request, Response, "");
  }
  catch(err)
  {
    SendFault("SoapServer.SoapInvoke failed. " & err.description);
  }
  
  function SendFault(LogMessage)
  {
    
    var Serializer;
    
    // "URI Query" logging must be enabled for AppendToLog to work
    
    Response.AppendToLog(" SOAP ERROR: " & LogMessage);
    
    try
    {
      Serializer = Server.CreateObject(SOAPSERIAL_CLASS);
    }
    catch(err)
    {  
      Response.AppendToLog("Could not create SoapSerializer object. " & err.description);
      Response.Status = "500 Internal Server Error";
      Response.End();
    }

    try
    {    
      Serializer.Init(Response);
    }
    catch(err)
    {
      Response.AppendToLog("SoapSerializer.Init failed. " & err.description);
      Response.Status = "500 Internal Server Error";
      Response.End();
    }

    try
    {      
      Serializer.startEnvelope("", "", "");
      Serializer.startBody("");
      Serializer.startFault("Server", "The request could not be processed due to a problem in the server. Please contact the system admistrator. " + LogMessage, "");
      Serializer.endFault();
      Serializer.endBody();
      Serializer.endEnvelope();
    }
    catch(err)
    {
      Response.AppendToLog("SoapSerializer failed. " & err.description);
      Response.Status = "500 Internal Server Error";
      Response.End();
    }          
      
    Response.End();
    
  }  
  
%>
ENDTEXT

RETURN lcTempStr

ENDPROC
PROCEDURE checkvdirmap
LPARAMETERS tcVirDir
* Vdir = "IIS://LocalHost/w3svc/1/Root/" + name...

LOCAL oVdirObj, oShell, lcFile, lnPos, loErr
LOCAL laMaps
DIMENSION laMaps[1]

IF VARTYPE(tcVirDir)#"C" OR EMPTY(tcVirDir)
	RETURN
ENDIF

TRY
	oVDirObj = GetObject(tcVirDir)
	
	* Add SOAP Toolkit 3.0 ISAPI Extension mapping
	laMaps = oVdirObj.ScriptMaps

	oShell = CreateObject("WScript.Shell")
	lcFile = oShell.RegRead(ISAPIKEY)
	IF FILE(lcFile) AND VARTYPE(oVDirObj)="O"
		* Check if extension is there
		lnPos = ASCAN(laMaps,".wsdl",-1,-1,-1,5)
		
		* Add SOAP Toolkit 3.0 ISAPI Extension mapping if not already registered or has different one.
		DO CASE
		CASE lnPos=0
			IF MESSAGEBOX(MB_UPDATEVDIR_LOC,36)=6
				DIMENSION laMaps[ALEN(laMaps)+1]
				laMaps[ALEN(laMaps)] = ".wsdl," + lcFile + ",1,GET,POST"
				COMARRAY(oVdirObj,10)
				oVdirObj.Put("ScriptMaps", @laMaps)
				oVdirObj.SetInfo()
			ENDIF
		CASE ATC(lcFile, laMaps[lnPos])=0
			IF MESSAGEBOX(MB_UPDATEVDIR2_LOC,36)=6
				laMaps[lnPos] = ".wsdl," + lcFile + ",1,GET,POST"
				COMARRAY(oVdirObj,10)
				oVdirObj.Put("ScriptMaps", @laMaps)
				oVdirObj.SetInfo()
			ENDIF
		ENDCASE		
	ENDIF
CATCH TO loErr

	* Eat errors here since we do not need to detect for non-local vdirs.
ENDTRY
ENDPROC
PROCEDURE Destroy
IF !EMPTY(THIS.cwsalias) AND SELECT(THIS.cwsalias)#0
	SELECT (THIS.cwsalias)
	USE
ENDIF

THIS.aInts = null
ENDPROC
PROCEDURE Error
LPARAMETERS nError, cMethod, nLine
LOCAL lcErrorMsg
THIS.lhaderror = .T.
IF THIS.lIgnoreErrors OR INLIST(nError,1113,1426,2012) OR _VFP.StartMode>0
	RETURN
ENDIF

TEXT TO lcErrorMsg NOSHOW TEXTMERGE
<<MESSAGE()>>

ERR_LOCATION_LOC <<THIS.Name>>
ERR_NUMBER_LOC <<TRANSFORM(nError)>>
ERR_METHOD_LOC <<cMethod>>
ERR_MESSAGE_LOC <<MESSAGE(1)>>
ERR_LINE_LOC <<TRANSFORM(nline)>>
<<REPLICATE("_",30)>>
ERR_MSG1_LOC
ERR_MSG2_LOC

ENDTEXT
		
IF MESSAGEBOX(lcErrorMsg,17,MB_ERRTITLE_LOC)#1
	IF TYPE("THISFORM")="O"
		RELEASE THISFORM
		CANCEL
	ELSE
		RELEASE THIS
	ENDIF
	IF lUsingWizard
		CANCEL
	ENDIF
	RETURN .F.
ENDIF

ENDPROC
,gPROCEDURE updateall
* Reset defaults
THIS.pfSettings.pgServices.lstServices.Clear()
THIS.lblWSDL.cTarget = ""
THIS.pfSettings.pgServices.cboMethods.Clear()

SELECT (THIS.oWeb.cWSAlias)

* Builder comes in reentrant
IF !THIS.lFirsttime
	THIS.pfSettings.pgServices.lblNewWS.Caption = CHANGEWS_LOC
	THIS.LoadObject()
	THIS.pfSettings.ActivePage=2
ELSE
	IF TYPE("THIS.colOperations")#"O"
		THIS.AddObject("colOperations","collection")
	ENDIF
	TRY
		WITH THIS.pfSettings.pgServices.lstServices
			SCAN FOR UPPER(Type)="C"
				.AddListItem(ALLTRIM(Class) + " (" + ALLTRIM(Name) + ")")
				.AddListItem(ALLTRIM(UniqueID), .NewItemId, 2)
				.AddListItem(ALLTRIM(URI), .NewItemId, 3)
			ENDSCAN
			IF .ListCount>0
				GO TOP
				.ListIndex = 1
				.Enabled = .T.
				THIS.WSDL = ALLTRIM(Uri)
				THIS.WSML = ALLTRIM(Wsml)
				THIS.Service =  ALLTRIM(Name)
				THIS.Port =  ALLTRIM(Port)
				THIS.wsname =  ALLTRIM(Class)
				THIS.UpdateService(ALLTRIM(.List(1,2)))
				THIS.lWSfound = .T.
			ENDIF
		ENDWITH
	CATCH
	
	ENDTRY
ENDIF

ENDPROC
PROCEDURE updateservice
LPARAMETERS lcWS

LOCAL i

IF !EMPTY(lcWS)
	SELECT (THIS.oWeb.cWSalias)
	LOCATE FOR UPPER(ALLTRIM(UniqueID)) == UPPER(ALLTRIM(lcWS)) AND;
		UPPER(Type) = "C"
	IF !FOUND()
		RETURN
	ENDIF
ENDIF

* Set properties
THIS.WSDL = ALLTRIM(Uri)
THIS.WSML = ALLTRIM(Wsml)
THIS.Service = ALLTRIM(Name)
THIS.Port = ALLTRIM(Port)
THIS.wsName =  ALLTRIM(Class)

* Set controls
THIS.lblWSDL.ctarget = THIS.WSDL
THIS.pfSettings.pgServices.lblServiceDoc.Caption = ALLTRIM(Comfile) 

WITH THIS.pfSettings.pgServices.cboMethods
	.Enabled=.T.
	.Clear()
	FOR i = 1 TO GETWORDCOUNT(Menu)
		.AddItem(ALLTRIM(GETWORDNUM(Menu, m.i, CHR(13)+CHR(10))))
	ENDFOR
	IF .ListCount>0
		.ListIndex=1
	ENDIF
ENDWITH

THIS.UpdateMethod()

ENDPROC
PROCEDURE loadobject
LOCAL lcStr,i
* Load property settings
WITH THIS.oObject
	THIS.WSDL = .WSDL
	THIS.WSML = .WSML
	THIS.Service = .Service
	THIS.Port = .Port
	THIS.wsname = .wsname
	THIS.wsmethod = .wsmethod
	THIS.wssyntax = .wssyntax
ENDWITH

* Set various builder controls
WITH THIS.pfSettings.pgServices.lstServices
	.AddItem(THIS.wsname + " (" + THIS.Service + ")")
	.ListIndex=1
	.Enabled=.F.
ENDWITH

THIS.lblWSDL.cTarget = THIS.WSDL

* See if we have web service registered
SELECT (THIS.oWeb.cWSAlias)

LOCATE FOR UPPER(ALLTRIM(URI)) == UPPER(ALLTRIM(THIS.WSDL)) AND ;
	UPPER(ALLTRIM(Name)) == UPPER(ALLTRIM(THIS.Service)) AND ;
  	UPPER(ALLTRIM(Port)) == UPPER(ALLTRIM(THIS.Port)) AND ;
  	UPPER(Type) = "C" AND !DELETE()

THIS.lwsfound = FOUND()
THIS.pfSettings.PgServices.lblRefresh.Visible = !THIS.lwsfound
IF THIS.lwsFound
	THIS.pfSettings.pgServices.lblServiceDoc.Caption = LEFT(ALLTRIM(Comfile),255)
	WITH THIS.pfSettings.pgServices.cboMethods
		FOR i = 1 TO GETWORDCOUNT(Menu)
			.AddItem(ALLTRIM(GETWORDNUM(Menu,m.i,CHR(13)+CHR(10))))
		ENDFOR
		.ListIndex=IIF(.ListCount>0,1,0)
		IF !EMPTY(THIS.wsMethod)
			.Value=THIS.wsMethod
		ENDIF
		THIS.UpdateMethod()
		.Enabled=IIF(.ListCount<2, .F., .T.)
	ENDWITH
ELSE
	WITH THIS.pfSettings.pgServices.cboMethods
		.Enabled=.F.
		IF !EMPTY(THIS.wsMethod)
			.AddItem(THIS.wsMethod)
			.ListIndex=1
		ENDIF
	ENDWITH
	MESSAGEBOX(REREGSITERWS_LOC)
ENDIF

lcStr = ALLTRIM(THIS.oObject.ReadMethod("SetupOperations"))
IF !EMPTY(lcStr)
	EXECSCRIPT(lcStr,THIS)
	IF TYPE("THIS.colOperations")="O" AND THIS.ColOperations.Count>0
		* Popupate the Operations collection
		FOR i = 1 TO THIS.ColOperations.Count
			WITH THISFORM.pfSettings.pgMethods.lstOperations
				.AddListItem(THIS.ColOperations(m.i).wsOperation)
				.AddListItem(THIS.ColOperations.GetKey(m.i), .NewItemId, 2)
			ENDWITH
		ENDFOR
		THISFORM.pfSettings.pgMethods.lstOperations.ListIndex=1
		THIS.UpdateClients()
	ENDIF
ELSE
	THIS.AddObject("colOperations","collection")
ENDIF

ENDPROC
PROCEDURE updateobject
* Set object properties
LOCAL lHadMethod, lcStr, i, j, lHasClients, lcClass

lHasMethod = .T.
lcStr=""
lcClass=IIF(VARTYPE(THIS.OperationClass)#"C" OR EMPTY(THIS.OperationClass), "colOperations", THIS.OperationClass)

WITH THIS

	.oobject.WSDL = .WSDL
	.oobject.WSML = .WSML
	.oobject.Service = .Service
	.oobject.Port = .Port
	.oobject.wsname = .wsname

	DO CASE
	CASE EMPTY(.WSDL)
		.oobject.WebServiceID = ""
	CASE EMPTY(.oobject.WebServiceID)
		.oobject.WebServiceID = SYS(2015)
	ENDCASE

	IF THIS.colOperations.Count>0

		SET TEXTMERGE ON TO MEMVAR lcStr NOSHOW
		IF VARTYPE("THIS.colOperations")#"O"

			\LPARAMETERS toObj
			\* This snippet is automatically generated by the XML Web Services Builder.
			\LOCAL lcClasslib, lHadError, loError, lBuilder, loObj
			\lBuilder = (VARTYPE(toObj)="O")
			\loObj=IIF(!lBuilder, THIS, toObj)
			IF VARTYPE(THIS.OperationClasslib)="C" AND FILE(THIS.OperationClasslib)
				\lcClasslib = "<<THIS.OperationClasslib>>"
			ELSE
				\lcClasslib = IIF(!lBuilder, THIS.ClassLibrary, HOME() + "FFC\_ws3Client.vcx")
			ENDIF
			\IF !lBuilder 
			\	loObj.cContainer = "<<THIS.GetContainer()>>"
			\ENDIF
			\
			\TRY
			\
			\  loObj.AddProperty("colOperations", NEWOBJECT("<<lcClass>>", lcClasslib))
			
			FOR i = 1 TO THIS.colOperations.Count
				\
				\  * Operation: <<THIS.colOperations(m.i).wsOperation>>
				\  WITH loObj.colOperations.NewItem([<<THIS.colOperations.GetKey(m.i)>>])
				\
				\    .wsOperation = [<<THIS.colOperations(m.i).wsOperation>>]
				\    .wsDesc = [<<THIS.colOperations(m.i).wsDesc>>]
				\    .wsMethod = [<<THIS.colOperations(m.i).wsmethod>>]
				\    .wsparmnum = <<THIS.colOperations(m.i).wsparmnum>>
				\    .lOffline = <<THIS.colOperations(m.i).lOffline>>
				\    .nParmPrompt = <<THIS.colOperations(m.i).nParmPrompt>>
				
				FOR j = 1 TO THIS.colOperations(m.i).colParms.Count
					\
					\    WITH .colParms.NewItem()
					\      .Parmname = [<<THIS.colOperations(m.i).colParms(m.j).Parmname>>]
					\      .Parmtype = [<<THIS.colOperations(m.i).colParms(m.j).Parmtype>>]
					\      .InputValue = [<<THIS.colOperations(m.i).colParms(m.j).InputValue>>]
					\      .InputControl = [<<THIS.colOperations(m.i).colParms(m.j).InputControl>>]
					\      .InputProperty = [<<THIS.colOperations(m.i).colParms(m.j).InputProperty>>]
					IF THIS.colOperations(m.i).colParms(m.j).IsByRef
						\      .IsByRef = .T.
					ENDIF
					\    ENDWITH
				ENDFOR
				
				FOR j = 1 TO THIS.colOperations(m.i).colClients.Count
					lHasClients=.T.
					\
					\    WITH .colClients.NewItem([<<THIS.colOperations(m.i).colClients.GetKey(m.j)>>])
					\      .ClientName = [<<THIS.colOperations(m.i).colClients(m.j).ClientName>>]
					\      .ObjectRef = [<<THIS.colOperations(m.i).colClients(m.j).ObjectRef>>]				
					\      .BindTarget = [<<THIS.colOperations(m.i).colClients(m.j).BindTarget>>]					
					\      .BindSource = [<<THIS.colOperations(m.i).colClients(m.j).BindSource>>]
					\      .BindProp = [<<THIS.colOperations(m.i).colClients(m.j).BindProp>>]
					\      .lInvokeAtStart = <<THIS.colOperations(m.i).colClients(m.j).lInvokeAtStart>>
					\      .lAlwaysCallWebService = <<THIS.colOperations(m.i).colClients(m.j).lAlwaysCallWebService>>				
					IF !EMPTY(THIS.colOperations(m.i).colClients(m.j).NodeName)
						\      .NodeName = [<<THIS.colOperations(m.i).colClients(m.j).NodeName>>]
					ENDIF
					IF !EMPTY(THIS.colOperations(m.i).colClients(m.j).DSTable)
						\      .DSTable = [<<THIS.colOperations(m.i).colClients(m.j).DSTable>>]
						\      .DSField = [<<THIS.colOperations(m.i).colClients(m.j).DSField>>]
						\      .DSUseExistingCursor = <<THIS.colOperations(m.i).colClients(m.j).DSUseExistingCursor>>
					ENDIF
					\    ENDWITH
				ENDFOR
				\
				\  ENDWITH
			ENDFOR
			\
			\CATCH TO loError
			\
			\  IF !lBuilder
			\    THIS.DisplayError(ACTIONFAIL_LOC+CRLF+CRLF+loError.Message)
			\  ENDIF
			\  lHadError = .T.
			\
			\ENDTRY
			\
			\RETURN !lHadError
		ENDIF

		SET TEXTMERGE OFF
		SET TEXTMERGE TO

	ENDIF

	THIS.oObject.WriteMethod("SetupOperations",lcStr)
	THIS.oObject.lHasClients=lHasClients

ENDWITH

ENDPROC
PROCEDURE updateclients
LOCAL j, lnItem, loOperation

lnItem = THIS.pfSettings.pgMethods.lstOperations.ListIndex
loOperation = THIS.colOperations(THIS.pfSettings.pgMethods.lstOperations.List(lnItem,2))
THIS.pfSettings.pgMethods.lstOperations.ToolTipText = loOperation.wsDesc
THIS.pfSettings.pgMethods.lstClients.Clear()
FOR j = 1 TO loOperation.ColClients.Count
	WITH THIS.pfSettings.pgMethods.lstClients
		.AddListItem(loOperation.ColClients(m.j).ClientName)
		.AddListItem(loOperation.ColClients.GetKey(m.j), .NewItemId, 2)
	ENDWITH
ENDFOR

ENDPROC
PROCEDURE displayerror
LPARAMETERS tcErrMessage
MESSAGEBOX(tcErrMessage, 0, MB_SOAPERRTITLE_LOC)
ENDPROC
PROCEDURE getcontainer
LOCAL laParent, lcName, loTmpObject , loControl

DIMENSION laParent[1]

IF ASELOBJ(laParent,3)=0
	RETURN
ENDIF
IF ATC(".VCX", laParent[2])=0
	RETURN ""
ENDIF

lcName = ""
loControl = THIS.oobject 
loTmpObject = loControl

DO WHILE .T.
	DO CASE
	CASE TYPE("loControl.Parent")#"O"
		EXIT	
	CASE UPPER(loTmpObject.BaseClass)=="FORM" AND !EMPTY(loTmpObject.ClassLibrary)
		loControl = loTmpObject
		lcName = loControl.Name + "." + lcName
		EXIT
	CASE TYPE("loTmpObject.Parent")="O" AND UPPER(loTmpObject.Parent.BaseClass)=="FORMSET" 
		IF !EMPTY(loTmpObject.Parent.ClassLibrary)
			loControl = loTmpObject
			lcName = loControl.Name + "." + lcName
		ENDIF
		EXIT
	OTHERWISE
		loControl = loTmpObject
		loTmpObject = loControl.Parent
		lcName = loControl.Name + IIF(EMPTY(lcName),"",".") + lcName
	ENDCASE

ENDDO

RETURN lcName

ENDPROC
PROCEDURE updatemethod
LOCAL lcSyntax, lcDesc, lcDescPane 

SELECT (THIS.oWeb.cWSalias)

WITH THIS.pfSettings.pgServices
	THIS.wsMethod = .cboMethods.DisplayValue
	.cboMethods.Enabled = IIF(.cboMethods.ListCount=0, .F., .T.)

	lcSyntax = ALLTRIM(GETWORDNUM(Tips, .cboMethods.ListIndex, CHR(13)+CHR(10)))
	lcDesc = ""
	IF !EMPTY(ALLTRIM(prefs))
		lcDesc = ALLTRIM(GETWORDNUM(Prefs,.cboMethods.ListIndex, CHR(13)+CHR(10)))
		lcDesc = IIF(GETWORDCOUNT(lcDesc)<2,"",ALLTRIM(SUBSTR(lcDesc,ATC(" ", lcDesc))))
	ENDIF
	
	* Update desc editbox
	lcDescPane = ""
	IF !EMPTY(lcSyntax)
		lcDescPane = lcDescPane + SYNTAX_LOC + lcSyntax + CRLF + CRLF
	ENDIF
	IF !EMPTY(lcDesc)
		lcDescPane = lcDescPane + DESCRIPT_LOC + lcDesc  + CRLF + CRLF
	ENDIF
	lcDescPane = lcDescPane + THIS.WSDl + CRLF
	.edtDesc.Value = lcDescPane
	
ENDWITH
ENDPROC
PROCEDURE setup

* Check for form container (VCX only)
IF .F.
LOCAL laParent, loControl, lHasFormset
DIMENSION laParent[1]
ASELOBJ(laParent,3)
loControl = laParent[1]
DO WHILE .T.
	IF UPPER(loControl.BaseClass)=="FORM" AND TYPE("loControl.DEClass")#"C"
		lHasFormset=.T.
		EXIT
	ENDIF
	IF TYPE("loControl.Parent")#"O" 
		EXIT
	ENDIF
	loControl=loControl.Parent	
ENDDO
IF lHasFormset
	MESSAGEBOX(NOFORMSET_LOC)	
	THIS.lrelease = .T.
	RETURN
ENDIF
ENDIF

THIS.lFirsttime = EMPTY(THIS.oobject.webserviceid)
THIS.cSaveNotify=SET("Notify",1)
SET NOTIFY CURSOR OFF
THIS.oWeb.CheckWSDbf()
THIS.UpdateAll()

ENDPROC
PROCEDURE Destroy
THIS.oObject=""
IF THIS.cSaveNotify="ON"
	SET NOTIFY CURSOR ON
ENDIF
ENDPROC
�Height = 247
Width = 374
Desktop = .F.
DoCreate = .T.
AutoCenter = .T.
Caption = "Manage XML Web Services"
WindowType = 0
AlwaysOnTop = .F.
AllowOutput = .F.
Name = "wsmanager"
Shape1.Visible = .F.
Shape1.Name = "Shape1"
cmdOK.Top = 216
cmdOK.Left = 300
cmdOK.Cancel = .T.
cmdOK.Caption = "Done"
cmdOK.TabIndex = 12
cmdOK.ZOrderSet = 1
cmdOK.Name = "cmdOK"
cmdCancel.Top = 216
cmdCancel.Left = 300
cmdCancel.Enabled = .F.
cmdCancel.TabIndex = 13
cmdCancel.Visible = .F.
cmdCancel.ZOrderSet = 0
cmdCancel.Name = "cmdCancel"
lstServices.ControlSource = ""
lstServices.TabIndex = 2
lstServices.Name = "lstServices"
lblMore.Caption = "\<Select an XML Web service:"
lblMore.TabIndex = 1
lblMore.ZOrderSet = 3
lblMore.Name = "lblMore"
oWeb.Top = 132
oWeb.Left = 324
oWeb.Name = "oWeb"
lblWSDL.TabIndex = 3
lblWSDL.ZOrderSet = 5
lblWSDL.Name = "lblWSDL"
cmdNew.Top = 216
cmdNew.Left = 12
cmdNew.TabIndex = 6
cmdNew.ZOrderSet = 6
cmdNew.Name = "cmdNew"
lblURI.TabIndex = 5
lblURI.Name = "lblURI"
chkCustom.Alignment = 0
chkCustom.ControlSource = ""
chkCustom.Enabled = .F.
chkCustom.TabIndex = 9
chkCustom.Visible = .F.
chkCustom.Name = "chkCustom"
chkError.Alignment = 0
chkError.ControlSource = ""
chkError.TabIndex = 11
chkError.Visible = .F.
chkError.Name = "chkError"
Label1.Height = 15
Label1.Left = 20
Label1.Top = 184
Label1.Visible = .F.
Label1.Width = 100
Label1.TabIndex = 7
Label1.Name = "Label1"