There are many questions when we want to do one action using Synchro Script.
First step is to learn from Synchro Help.
![]()
Second, you can always search from Synchro Community page:
SYNCHRO Construction Solution - Bentley Communities
![]()
Here we have some example script that may help you to start your script learning journey.
Create User Field and Calculation:
- Calculate from Resource to Task Level
TASK ASSIGN_UF ("MHour" , FLOAT , 0 )
TASK ASSIGN_UF ("MHour" , FLOAT , SUM(RESOURCE.UFV ("MHour") )
- Get Total MHour - WBS Level
TASK (NUM_CHILDREN>0) ASSIGN_UF ("MHour" ,FLOAT, SUM (CHILD.UFV ("MHour") )
- Copy UFV from String to Numeric
RESOURCE ASSIGN_UF("[SYNC]Volume", FLOAT, UFV("Volume"))
- Copy UF to other UF
3D (EXIST UFV("WBS_A")) ASSIGN_UF ("WBS",STRING,STRING(UFV("WBS_A")))
- Create UF for Group to get multi TASK using MODIFY_UF_NAME
GROUP ASSIGN_UF(MODIFY_UF_NAME , "TASK NAME" , STRING , EACH (TASK.PROPERTY("Name")))
- Create UF for Delayed days (planned date – baseline date)
TASK ASSIGN_UF("Synchro Delay", FLOAT, (PROPERTY("Planned Start") - PROPERTY("BL Early Start")) / ( 3600*24 ) )
- Compare duration
TASK ( PROPERTY("Actual Duration") <= PROPERTY("Planned Duration") ) ASSIGN_UF ("ALERT" , STRING , "OFF" )
TASK ( PROPERTY("Actual Duration") > PROPERTY("Planned Duration") ) ASSIGN_UF ("ALERT" , STRING , "ON" )
- Create UF = Sum of certain Status Name
TASK(SELECTED) ASSIGN_UF("Task Complete Quantity ", DOUBLE, SUM(RESOURCE(STATUS_NAME("Default category")=="Status Name").UFV("Complete Quantity")))
- To copy “Level” attribute from Parent to Child.
RESOURCE(SELECTED AND NUM_CHILDREN == 0) ASSIGN_UF ("Level" ,STRING, PARENT.PARENT.UFV("Level"))
RESOURCE(SELECTED AND NUM_CHILDREN == 0) ASSIGN_UF ("Level" ,STRING, PARENT.UFV("Level"))
- To copy “Level” attribute from Child to Parent.
RESOURCE ASSIGN_UF ("Isometric", STRING, CHILD(NUM_CHILDREN == 0 AND EXIST UFV("Isometric") >= "").UFV("Isometric"))
Set Resource Status:
- Update Resource Status from Task User Field
TASK(SELECTED AND STRING(UFV("Material Status")) == "No Material" ).RESOURCE (NOT STATUS_HISTORY("Material Status") >="No Material") SET_PROPERTY (STATUS_NAME , "Material Status::Construction Component::"+ "No Material")
TASK(SELECTED AND STRING(UFV("Material Status")) == "Partially Allocatted" ).RESOURCE (NOT STATUS_HISTORY("Material Status") >="Partially Allocatted") SET_PROPERTY (STATUS_NAME , "Material Status::Construction Component::"+ "Partially Allocatted")
TASK(SELECTED AND STRING(UFV("Material Status")) == "Fully Allocated" ).RESOURCE (NOT STATUS_HISTORY("Material Status") >="Fully Allocated") SET_PROPERTY (STATUS_NAME , "Material Status::Construction Component::"+ "Fully Allocated")
- Update Resource Status from Task %Complete
TASK(SELECTED AND PROPERTY("% Complete") = 0 ).RESOURCE (NOT STATUS_HISTORY("Installation Status") >="Not Started") SET_PROPERTY (STATUS_NAME , "Installation Status::Construction Component::"+ "Not Started")
TASK(SELECTED AND PROPERTY("% Complete") >0 AND PROPERTY("% Complete") <=25 ).RESOURCE (NOT STATUS_HISTORY("Installation Status") >=">0% and <=25%") SET_PROPERTY (STATUS_NAME , "Installation Status::Construction Component::"+ ">0% and <=25%")
TASK(SELECTED AND PROPERTY("% Complete") >25 AND PROPERTY("% Complete") <=50 ).RESOURCE (NOT STATUS_HISTORY("Installation Status") >=">25% and <=50%") SET_PROPERTY (STATUS_NAME , "Installation Status::Construction Component::"+ ">25% and <=50%")
TASK(SELECTED AND PROPERTY("% Complete") >50 AND PROPERTY("% Complete") <=75 ).RESOURCE (NOT STATUS_HISTORY("Installation Status") >=">50% and <=75%") SET_PROPERTY (STATUS_NAME , "Installation Status::Construction Component::"+ ">50% and <=75%")
TASK(SELECTED AND PROPERTY("% Complete") >75 AND PROPERTY("% Complete") <=100 ).RESOURCE (NOT STATUS_HISTORY("Installation Status") >=">75% and <=100%") SET_PROPERTY (STATUS_NAME , "Installation Status::Construction Component::"+ ">75% and <=100%")
TASK(SELECTED AND PROPERTY("% Complete") == 100).RESOURCE (NOT STATUS_HISTORY("Installation Status") >="Completed") SET_PROPERTY (STATUS_NAME , "Installation Status::Construction Component::"+ "Completed")
Create Resource Group:
- Create Group from the Task
TASK.RESOURCE ASSIGN_GROUP_BY_ID EACH TASK NAME
- Create Group from the User Field
RESOURCE (EXIST UFV ("Work Package")) ASSIGN_GROUP_BY_ID (UFV ("Work Package"))
- Sync Group Data from Task
GROUP UNASSIGN_OBJECT RESOURCE
GROUP ASSIGN_OBJECT VAR TASK (NAME == $0.NAME).RESOURCE
Set Property
- Rename Task name
TASK SET_PROPERTY (NAME, "Install " + " - " + UFV("Category"))
- Actual Cost Form Budget Cost:
TASK SET_PROPERTY(PROPERTY("Actual Direct Cost"),PROPERTY("Budgeted Direct Cost")*PROPERTY("% Complete")/100)
- Set Task – Resource Plan Unit quantity:
RESOURCE(NAME=="Concrete").ASSIGNMENT SET_PROPERTY (PLANNED_WORK, TASK.UFV("[SYNC]Volume"))
- Set Task – Resource Actual Unit quantity:
RESOURCE (NAME=="Concrete").ASSIGNMENT SET_PROPERTY (ACTUAL_WORK, PROPERTY("Planned Units") * TASK.PROPERTY("% Complete") / 100)
- Resource Actual Unit calculation
TASK(SELECTED.ASSIGNMENT SET_PROPERTY(ACTUAL_WORK, PROPERTY("Planned Units") * TASK.PROPERTY("% Complete")/100)
- Change Appearance Profile
TASK(SELECTED).ASSIGNMENT SET_PROPERTY (PROPERTY("Appearance Profile"), ALL_USE_PROFILE( NAME == "Concrete" ))
TASK.ASSIGNMENT (RESOURCE.UFV("Structural Material")>="Concrete" OR RESOURCE.UFV("Type")>="Concrete" OR RESOURCE.UFV("Material")>="Concrete" ) SET_PROPERTY ( PROPERTY("Appearance Profile"), ALL_USE_PROFILE( NAME == "Concrete" ))
- Physical Quantity / Volume
TASK SET_PROPERTY (PHYSICALVOL_SH, "Cubic metre", UFV("Total Volume"))
TASK(SELECTED) SET_PROPERTY(PHYSICALVOL_SH, "Ton", SUM (3D.UFV("Weight.FLOAT")) /2000.0)
- Physical Quantity from 3D geometric volume
RESOURCE ASSIGN_UF ("Volume", STRING,3D_CALCULATE_VOLUME(3D)))
TASK ASSIGN_UF ("Volume", FLOAT , 3D_CALCULATE_VOLUME(3D))
TASK SET_PROPERTY(PHYSICALVOL_SH, "Cubic metre", UFV("Volume"))
- Calculate and set Task Duration
TASK SET_PROPERTY(PROPERTY("Task_Duration”), STRING(SUM(RESOURCE.UFV("TheDuration"))) + "h"))
- Round the Task Duration to 8 hours
TASK SET_PROPERTY(TASK_DURATION , ( (TASK_DURATION + "7.99h") / ( 3600*8 ) ) * (3600*8))
Or to 4 hours
TASK SET_PROPERTY(TASK_DURATION , ((TASK_DURATION + "3.99h")/(3600*4 )*(3600*4)))
- Set Task Budgeted Direct Cost:
TASK SET_PROPERTY(PROPERTY("Budgeted Direct Cost"), SUM(RESOURCE.UFV("Pris")))