Hi Community,
Would anyone have any pointers for me on how I could use a custom automation script to swap a (non-function) resource in a resource scheduling environment?
The BookingManager.TrySwapResource(...) method fails because my resource is not a function resource.
Below you can find the error that is thrown by the TrySwapResource method.
Script Failure (SRM_ResourceActions): (Code: 0x80131500) Skyline.DataMiner.Net.Exceptions.DataMinerException: The Service Definition with ID SRT.Default does not contain any nodes.
at CManagedAutomation.RunWrapped(CManagedAutomation* , Int32 iCookie, IUnknown* pIAutomation, tagVARIANT* varParameters, tagVARIANT* pvarReturn, String scriptName)
at CManagedAutomation.Run(CManagedAutomation* , Int32 iCookie, Char* bstrScriptName, IUnknown* pIAutomation, tagVARIANT* varParameters, tagVARIANT* varEntryPoint, tagVARIANT* pvarReturn, tagVARIANT* pvarEntryPointResult) (CSharp; 0x80131500h): (see comment for more details)
hi Ive
Since resource scheduling doesn't have any functions in the service definition to assign resources to, TrySwapResource won't do for this use case indeed.
Booking.AssignResources() can be used here. Support to assign resources has been added since SRM 1.2.19. The resource that needs to be swapped can be unassigned using booking.UnassignResources().
Example AssignResources()
var request = new AssignResourceRequest
{
TargetNodeLabel = "", // When assigning a resource unmapped the `TargetNodeLabel` needs to be null or empty.
NewResourceId = resourceIdToAssign,
ProfileInstanceId = profileInstanceIdByRef, // ID of the Profile Instance to assign by reference. Use `Guid.Empty` to not set or remove the Profile Instance.
InterfacesProfileIntanceId =
{
{ interfaceId, interfaceProfileInstanceIdByRef } // ID of the interface and the Profile Instance to assign by reference for that interface. Use `Guid.Empty` as value to not set or remove the Profile Instance.
},
IsContributing = false, // Set to `true` when assigning contributing resource
};
booking = booking.AssignResources(Engine, request);
Example UnassignResources()
To unassign a resource, a new method UnassignResources has been added:
var request = new AssignResourceRequest
{
TargetNodeLabel = "", // When unassigning a resource unmapped the `TargetNodeLabel` needs to be null or empty.
NewResourceId = resourceIdToUnassign,
};
booking = booking.UnassignResources(Engine, request);
They’re available as extension methods in Skyline.DataMiner.Library.Solutions.SRM.
Turns out that this is not working on the default ReservationInstance object, but you need to cast the reservation instance to ServiceReservationIance to get the above working.
I’m using SRM 1.2.29, but I’m unable to find the AssignResources and UnassignResources methods.
In what namespace are they defined?