We would like to search specific contributing resources. To do this we like to use the same mechanism as to search (eligible) normal resources by mapping capabilities.
This means we need to add capabilities + set the value to the contributing resource.
How can this be done?
I was able to make it work using the "Contributing Config" property on the Service definition (used for the contributing) itself.
This property value (Json format) can contain a Script indication.
For example:
{"Script":"Script:SRM-UpdateContributingRxResource||Reservation ID=[RESERVATIONID]","LifeCycle":"Locked","ParentSystemFunction":"4a0277fc-cd2a-4828-b16e-d1831b5f3e1c","ReservationAppendixName":"RX_Reuse","ResourcePool":"Reusable RX","ConvertToContributing":"True", "Concurrency": 5}
Within this script I retrieve the Contributing booking reservation from which I can get the contributing resource and the FunctionData.
var reservationID = engine.GetScriptParam("Reservation ID")?.Value;
if (!(SrmManagers.ResourceManager.GetReservationInstance(new Guid(reservationID)) is ServiceReservationInstance reservation))
{
engine.GenerateInformation(string.Format("ERROR|Reservation not found for Reservation ID {0} ", reservationID));
return;
}
if (reservation.TryGetContributingResource(out Resource contributingResource))
{
var reservationFunctions = reservation.GetFunctionData();...
Via this data I can get all the required info for the capability that is available within the parameters of each Node in the contributing booking.
Adding the capability is done via this code:
public static Resource AddOrUpdateCapabilityOnResource(Resource resource, ResourceCapability resourceCapability)
{
resource.Capabilities = resource.Capabilities ?? new List<ResourceCapability>();
resource.Capabilities.Add(resourceCapability);
return SrmManagers.ResourceManager.AddOrUpdateResources(resource).First();
}
For contributing bookings, there's the possibility to run a script after a booking is converted to contributing.
Just need to define the script to execute in the Contributing Configuration property.
When defining this setting using the placeholder [RESOURCEID] it will be possible to retrieve the resource associated with the contributing booking which can then be adjusted to add the desired capabilities.
E.g. "Script:SRM_DummyScript||DummyParameterName=[RESOURCEID]"
Hi Mieke,
I attempted to implement your solution, but I encountered a problem. The reservation takes a few seconds to be created, and as a result, the script that attempts to retrieve the reservation and set the capability is failing. I'm observing the message "Reservation not found for Reservation ID..." in the information events.
Therefore, this solution is not ideal. Additionally, it introduces complexity as it requires adding another script in the service definition.
I have implemented a better solution. After creating a reservation for my reusable resource (and before creating the reservation of my regular booking), I can retrieve the resource and update it using the following code:
// Generate the reservation.
var rxReusableReservation = srmInteractions.CreateReservation(rxReusable) as ServiceReservationInstance;// Get the contributing resource.
if (rxReusableReservation.TryGetContributingResource(out Resource contributingResource))
{
AddOrUpdateCapabilityOnResource(contributingResource, resourceCapability);
}
Please add the minimum DMA version + minimum SRM version where these methods are available.
Hi Mieke,
I’m using SRM package version 1.2.28 and my DMA version is 10.3.5
Hi Mieke, adding capabilities can be done in the "CreatedBookingAction" script. This script will run before the booking is set to confirmed state. For more information, see the "Created Booking Action" section in the SRM Framework user manual.
Hi André,
I’ve tried 2 different approaches but I am still failing to set capabilities on the contributing resources holding data that is calculated in the custom booking wizard.
approach 1:
– custom booking wizard creates contributing booking
– custom booking wizard try-gets the contributing resource
– custom booking wizard add the capability param with a value. (in my case matrix input Id that should be used)
Result: capability is not added to the generated resource. I do see 3 other capabilities of which I do not know where they come from. The info event show that the SRM_ConvertToContributing was run after the booking wizard created both contributing and main booking.
approach 2: using the Created Booking Action property on the contributing node in the main service definition.
– Via this way: how do I pass the dynamic data that is calculated in the booking wizard. So far I see I need to hardcode this in the node property.