Bookshelf Home | Contents | Index | Search | PDF |
Developing and Deploying Siebel eBusiness Applications > Creating a Virtual Business Component >
Code Sample
The following is the code breakdown for the NREC's example business service. See Defining Business Service Scripts for the steps for defining the code and associating it with the business service.
(declaration) :-
Dim FieldCount As Integer
Dim NoOfRecords As Integer
Dim DataSource As String
Dim ColumnsReqd As String
Dim VBCName as StringPal_Init : -
Sub Pal_Init (Inputs as PropertySet, Outputs as PropertySet)
Dim theFieldName(100) As String
Dim ParamText as String' Identify setup details of calling VBC and add as Parameter to Service
ParamText = Inputs.GetProperty("Parameters")
VBCName = Inputs.GetProperty("Business Component Name")Me.SetProperty VBCName, ParamText
me.SetProperty VBCName & "Qry", "None"If ParamText <> "" Then
DataSource = Left(ParamText,Instr(ParamText,";")-1)
ParamText = Mid(ParamText,Instr(ParamText,";")+1)
FieldCount = CVar(Left(ParamText,Instr(ParamText,";")-1))
ColumnsReqd = Mid(ParamText,Instr(ParamText,";")+1)
End If' Initialise the full list of Fields Available
Open DataSource For Input As #1
For Count = 1 To FieldCount
Input #1,theKey
theFieldName(Count) = RTrim(theKey)
Outputs.SetProperty theFieldName(Count), ""
'MsgBox(theFieldName(Count))
Next Count
Close #1End Sub
Pal_Insert :-
Sub Pal_Insert (Inputs As PropertySet, Outputs As PropertySet)
Dim InputFields(100) As String
Dim InputValues(100) As String
Dim NoOfValues As Integer
Dim InputPS As PropertySet
Dim OutputStr As String
Dim PadReqd As IntegerNoOfValues = 0
' ****************************************************************** ****************
' * Establish the Value Pairs to Be Used for Insert from the Inputs Property set
' ****************************************************************** ****************
If Inputs.GetFirstProperty <> "" Then
Set InputPS=TheApplication.NewPropertySet()
Set InputPS = Inputs.GetChild(0)
InputFields(1) = InputPS.GetFirstProperty
InputValues(1) =
InputPS.GetProperty(InputPS.GetFirstProperty)
NoOfValues = NoOfValues + 1
For i = 2 to FieldCount
InputFields(i) = InputPS.GetNextProperty
If InputFields(i) <> "" Then
InputValues(i) =
InputPS.GetProperty(InputFields(i))
NoOfValues = NoOfValues + 1
End If
Next i
End If' ****************************************************************** ****************
' * Create the Output String for Writing to the File in the right order
' ****************************************************************** ****************
Open DataSource For Input As #1
For Count = 1 To FieldCount
PadReqd = 1 ' Identify by default we need a Pad string in the file
Input #1,theKey
For i = 1 to NoOfValues
If InputFields(i) = theKey Then
PadReqd = 0
If OutputStr <> "" Then
OutputStr = OutputStr & ","
End If
OutputStr = OutputStr & InputValues(i)
End If
Next i
If PadReqd = 1 Then
If OutputStr <> "" Then
OutputStr = OutputStr & ","
End If
OutputStr = OutputStr & " "
End If
Next CountClose #1
'MsgBox OutputStr
' ****************************************************************** ****************
' * Create the Output String In the DataSource File
' ****************************************************************** ****************
Open DataSource For Append As #1
Print #1,OutputStr
Close #1
End Sub
Pal_PreInsert :-
Sub Pal_PreInsert (Outputs As PropertySet)
' ****************************************************************** ****************
' * A Pre Insert Method is Required before any insert is applied, Its use to provide
' * Default Values, This Service does not provide any defaults, But must return a
' * populated property set, so this points to the first field by default
' ****************************************************************** ****************
dim newRow As PropertySet
set newRow = TheApplication.NewPropertySet()newRow.SetProperty Left(ColumnsReqd,Instr(ColumnsReqd,",")- 1),""
Outputs.AddChild newRow
End Sub
Pal_Query :-
Sub Pal_Query (Inputs as PropertySet, Outputs as PropertySet)
' ****************************************************************** ****************
' * The adding of properties in the me.SetProperty statements in this code is used To store key information and the relevant data against parameters identified by the VBC name. This technique is used to create a persistant store and negate yhe need for repeat calls to the external source for the same data
' ****************************************************************** ****************
Dim Row(999) As PropertySet
Dim theFieldName(100) As String
Dim QueryValues(100) As String
Dim QueryFields(100) As String
Dim QueryList As PropertySet
Dim ColList, ColData, QryData As String
Dim OutColCount, OutRowCount, NoOfQs, RowMatches, DoQuery As IntegerDoQuery = 1
NoOfQs = 0
OutColCount = 0
OutRowCount = 0' ****************************************************************** ****************
' * Establish the list of Columns Which define the Query Values from the VBC
' ****************************************************************** ****************
Set QueryList = TheApplication.NewPropertySet()
Set QueryList = Inputs.GetChild(0)' Inputs.GetChild(0) retrieves user inputs ,like ("First Name","Angela") , etc...
If QueryList.GetFirstProperty <> "" Then
QueryFields(1) = QueryList.GetFirstProperty
QueryValues(1) = QueryList.GetProperty(QueryList.GetFirstProperty)
NoOfQs = NoOfQs + 1
QryData = QueryFields(1) & "=" & QueryValues(1)
'MsgBox QueryFields(1) & "/" & QueryValues(1)
For i = 2 to FieldCount
QueryFields(i) = QueryList.GetNextProperty
If QueryFields(i) <> "" Then
QueryValues(i) =
QueryList.GetProperty(QueryFields(i))
NoOfQs = NoOfQs + 1
QryData = QryData & ";" & QueryFields(i) & "=" & QueryValues(i)
' MsgBox QueryFields(i) & "/" & QueryValues(i)
End If
Next i
End If' ****************************************************************** ****************
' * Establish If Query is same as Last Time for this VBC and If So Set Query Flag
' * to use Persistant Cache
' ****************************************************************** ****************
If me.GetProperty(VBCName & "Qry") <> QryData Then
me.SetProperty VBCName & "Qry", QryData
Else
DoQuery = 0
End If
' ****************************************************************** ****************
' * Establish Full List of Columns Available and Which ones are needed by the VBC
' * Where not required, Identify this with Column Value Not Required CVNR
' ****************************************************************** ****************
If DoQuery = 1 Then
Open DataSource For Input As #1
For Count = 1 To FieldCount
Input #1,theKey
If Instr(ColumnsReqd,theKey) <> "0" Then
theFieldName(Count) = RTrim(theKey)
OutColCount = OutColCount + 1
Else
theFieldName(Count) = "CVNR"
End If
Next Countme.SetProperty VBCName & "ColCnt", CStr(OutColCount)
' ****************************************************************** ****************
' * Retreveal of Data from Text File, Including ignoring Columns Not Required and
' * Ignoring rows which do not match the selection criterion
' ****************************************************************** ****************
For r = 1 to 999
On Error Goto EndLoop
rowMatches = 1 'set to true
Input #1, theKey
theValue = RTrim(theKey)
If theValue <> "" Then
Set Row(r) = TheApplication.NewPropertySet()
If theFieldName(1) <> "CVNR" Then
Row(r).SetProperty theFieldName(1), theValue
ColList = theFieldName(1)
ColData = theValue
For x = 1 to NoOfQs
If QueryFields(x) = theFieldName(1) and QueryValues(x) <> theValue Then
rowMatches = 0
End If
Next x
End If
For Count = 2 To FieldCount
Input #1, theKey
theValue = RTrim(theKey)
If theFieldName(Count) <> "CVNR" Then
Row(r).SetProperty theFieldName(Count), theValue
ColList = ColList & ";" & theFieldName(Count)
ColData = ColData & ";" & theValue
For x = 1 to NoOfQs
If QueryFields(x) = theFieldName(Count) and QueryValues(x) <> theValue Then
rowMatches = 0
End If
Next x
End If
Next Count
If rowMatches = 1 Then
Outputs.AddChild Row(r)
OutRowCount = OutRowCount + 1
me.SetProperty VBCName & CStr(OutRowCount), ColData
End If
ElseEndLoop:
Exit For
End If
Next r
Close #1
me.SetProperty VBCName & "RowCnt", CStr(OutRowCount)
me.SetProperty VBCName & "Col", ColList
Else
' ****************************************************************** ****************
' * Re Create Output property set from the Persistant Cache held in the Business
' * Service Property Set
' ****************************************************************** ****************
OutColCount = CVar(GetProperty(VBCName & "ColCnt"))
OutRowCount = CVar(GetProperty(VBCName & "RowCnt"))
For i = 1 to OutRowCount
ColList = GetProperty(VBCName & "Col")
ColData = GetProperty(VBCName & CStr(i))
Set Row(i) = TheApplication.NewPropertySet()
For x = 1 to OutColCount-1
theField = Left$(ColList,Instr(ColList,";")-1)
theValue = Left$(ColData,Instr(ColData,";")-1)
ColList = Mid$(ColList,Instr(ColList,";")+1)
ColData = Mid$(ColData,Instr(ColData,";")+1)
Row(i).SetProperty theField, theValue
Next x
Row(i).SetProperty ColList, ColData
Outputs.AddChild Row(i)
Next i
End IfEnd Sub
Service_PreInvokedMethod :-
Function Service_PreInvokeMethod (MethodName As String, Inputs As PropertySet, Outputs As PropertySet) As Integer
Dim ParamText as String
'***************************************************************** *****************
'* SYSTEM DEFINITION SECTION
'*
'* The Calling V.BusComp must include the following parameters
'*
'* Service Name = Pal Mk2 (Unless Renamed)
'* Service Parameters = <Full Path & DataFile Name>;
'* <No Of Columns in File>;
'* <Columns in Calling VBC comma separated>
'*
'* e.g Service Parameters = c:\Siebel\Data.VBC;5;KeyId,FName,LName,Age,DOB
'*
'***************************************************************** *****************
' Identify the Context the Service is Called from and setup parameters
VBCName = Inputs.GetProperty("Business Component Name")
ParamText = me.GetProperty(VBCName)
If ParamText <> "" Then
DataSource = Left(ParamText,Instr(ParamText,";")-1)
ParamText = Mid(ParamText,Instr(ParamText,";")+1)
FieldCount = CVar(Left(ParamText,Instr(ParamText,";")-1))
ColumnsReqd = Mid(ParamText,Instr(ParamText,";")+1)
End If' Handle the Method
If MethodName = "Init" Then
Pal_Init Inputs, Outputs
Service_PreInvokeMethod = CancelOperation
ElseIf MethodName = "Query" Then
Pal_Query Inputs, Outputs
Service_PreInvokeMethod = CancelOperation
ElseIf MethodName = "Update" Then
'Pal_Update Inputs, Outputs - Not Yet Completed
Service_PreInvokeMethod = CancelOperation
ElseIf MethodName = "PreInsert" Then
Pal_PreInsert Outputs
Service_PreInvokeMethod = CancelOperation
ElseIf MethodName = "Insert" Then
Pal_Insert Inputs, Outputs
Service_PreInvokeMethod = CancelOperation
ElseIf MethodName = "Delete" Then
'Pal_Delete Inputs - Not Yet Completed
Service_PreInvokeMethod = CancelOperation
Else
Service_PreInvokeMethod = ContinueOperation
End IfEnd Function
Bookshelf Home | Contents | Index | Search | PDF |
Developing and Deploying Siebel eBusiness Applications Published: 18 April 2003 |