Hi all,
I'm looking for a way to export a complexe tree structure of my views in Lab (only the views, not the elements and services) and then import this structure into my production environement.
Any idea how to complete such action quickly and easily?
regards,
Julien
Hi Jens, Robin,
Thank you for your answers. It bring to my mind that it could also be done through a powershell script and WS API.
I have used a recursive function to achieve the job.
I browse the tree structure on lab and directly create the views on prod.
I'm not a powershell expert and it could be probably improved but here is what I did:
function migrateViews ($viewID, $destinationParentID){
$views = $ws.GetViewsForParent($connectionString,$viewID);
foreach($view in $views){
Write-Output "$($destinationParentID) : $($view.Name) NEW $($view.Name)";
#create view
$newViewID = $wsProd.createView($connectionStringProd,$destinationParentID,"NEW $($view.Name)");
Start-Sleep -s 1 #Wait view to be createdif($view.HasChilds){
migrateViews $view.ID $newViewID;
}
}
}$ws = New-WebServiceProxy -Uri "http://lab_IP/API/v1/soap.asmx?WSDL"
$connectionString = $ws.ConnectApp("Lab","user","pass","Web Api Data Service","?","?")$wsProd = New-WebServiceProxy -Uri "http://prod_ip/API/v1/soap.asmx?WSDL"
$connectionStringProd = $wsProd.ConnectApp("Prod","user","pass","Web Api Data Service","?","?")migrateViews 20141 20640
Hi Julien,
This is not possible by default.
I would suggest to use an automation script for this. Below code is a good starting point to get all the views that you want.
IDms dms = engine.GetDms();
IDmsView myStartView = dms.GetView("view name");foreach (IDmsView childView in myStartView.ChildViews)
{
// ....
}
You can store the result in a format of your choice in a file. Then on the other system you need to read out this file and create the view structure by using below code.
IDms dms = engine.GetDms();
IDmsView parentView = dms.GetView("name of parent view");
ViewConfiguration viewConfiguration = new ViewConfiguration("name of view", parentView);int newViewID = dms.CreateView(viewConfiguration);
Note this could take a considerable time when you have a big view structure with lots of different levels. The Childviews and Parent properties are not loaded by default and are loaded via a new Dataminer call when called from code. Having to access these properties a lot of time will increase the overall time of the operation.
Wow, great idea of using the Web API.
Congratulations Julien, it’s excellent.