|
|
|||||||
Is it possible to cast a string to an object? I know KiXtart isn't a static type language, but I was wondering if this is possible somehow? I'm trying to convert this VB7 function for my KF.NET application. Here is the code Code: Function AddComPlusApplication(ByVal applicationName As String, _ ByVal serverName As String) As Boolean Dim catalog As New COMAdmin.COMAdminCatalog catalog.Connect(serverName) ' get the Applications collection Dim apps As COMAdmin.COMAdminCatalogCollection = CType _ (catalog.GetCollection("Applications"), _ COMAdmin.COMAdminCatalogCollection) apps.Populate() If apps.AddEnabled Then 'Check to ensure duplicate is not created Dim i As Integer For i = 0 To apps.Count - 1 If applicationName = CType(apps.Item(i), _ COMAdmin.COMAdminCatalogObject).Name.ToString() Then Return False End If Next i Dim application As COMAdmin.COMAdminCatalogObject = CType(apps.Add(), _ COMAdmin.COMAdminCatalogObject) application.Value("Name") = CType(applicationName, Object) apps.SaveChanges() Return True End If Return False End Function Here's my KiXtart Function I have so far: Code: Function AddComPlusApplication($applicationName, optional $serverName) Dim $objCat, $apps Dim $i, $app, $iFlag Dim $application $objCat = CreateObject("COMAdmin.COMAdminCatalog.1") If $serverName $ = $objCat.Connect($serverName) EndIf $apps = $objCatalog.GetCollection("Applications") $apps.Populate() If $apps.AddEnabled = -1 For $i = 0 to $apps.Count() - 1 $app = $apps.Item($i) If $applicationName = CStr($app.Name) $iFlag = $TRUE $i = $apps.Count() - 1 EndIf Next EndIf If $iFlag <> $TRUE $application = $apps.Add() $application.Value("Name") = $applicationName ;cast to Object from String - how? $ = $apps.SaveChanges() EndIf EndFunction Is it possible to convert this to KiX? Code: application.Value("Name") = CType(applicationName, Object) |
||||||||
|
|
|||||||
Casting aside, this syntax here: application.Value("Name") = CType(applicationName, Object) Isn't supported by kixtart. Even if you could cast the string to an object (which is another matter altogether), kixtart won't let the assignment happen. The big question you have to answer is: What does this: $application.Value("Name") resolve to. I usually do this to find out: ?"VarTypeName = " + VarTypeName($application.Value("Name")) It will (should) either be a string or an object. If its a string - your probably dead. If its an object, you can probably make it work. Find this answer first. |
||||||||
|
|
|||||||
Thanks for replying Shawn. Well it looks like I'm dead. VarTypeName returns String. There's another way to call this code Code: $application.Name = Here is the description of the property: http://msdn2.microsoft.com/en-us/library/ms686107.aspx#_cos_applications_name |
||||||||
|
|
|||||||
ok, found some more info after branching-off that great link you gave: Quote: COMAdminCatalogObject.Value The Value property method is used to set or get a specific named property exposed by this catalog object. To get the value of a property, you provide a string naming the property, and a Variant containing the property value is returned. So - this just retrieves a named property. So theoretically, you should be able to just use this: $Name = $Object.Name |
||||||||
|
|
|||||||
Shawn, I think you gave me code to get the .Name property value. But how would you set a value to the .Name property? |
||||||||
|
|
|||||||
I would just try: $Object.Name = "Whatever" And do an @SERROR to see what the complaint is. |
||||||||
|
|
|||||||
Hmmm, we're getting somewhere. The error I received when executing this code: Code: $application.Name = $applicationName is Invalid number of parameters. |
||||||||
|
|
|||||||
With VB I have had some success with a structure like this; change this: Code: $application.Value("Name") = $applicationName to this: Code: $application.Value("Name",$applicationName) |
||||||||
|
|
|||||||
Thanks for chiming in Benny. However when changing the code as indicated above, I'm still getting the same error message: Invalid number of parameters |
||||||||
|
|
|||||||
It's looking for the specific entries associated with the object. I've not looked it up but as an example MyObject('date','time','year') You would need to supply date,time,and year in that example. You need to lookup and see what values (parameters) it's looking for and supply them. Often they could be like: 'name,,,,,8,) meaning that name and 8 were required and the others were optional. |
||||||||
|
|
|||||||
Was reading more of your MSDN docs there. Looks like the Name property is read-only. Ok. And to set the name, you use the Value property, like you already have: $Object.Value("Name") = "Whatever" But basically if this is whats really required - then your dead. Kixtart just doesn't support this particular COM syntax. Sad I know. Wonder if we could get Ruud to comment on. |
||||||||
|
|
|||||||
I hope he can chime in! |
||||||||
|
|
|||||||
Well, you might already know. He's on vacation right now. Have no idea when he will get back. I will email him and ask he he can comment on this syntax limitation. I remember having discussions about it. There might be some history on the board here. And this is about at least the forth COM object that has properties implemented this way , ... one of the others was an excel call ... let me search ... |
||||||||
|
|
|||||||
Bringing this back from the dead...Shawn have you talked to Ruud about this? |