I found the solution myself. I was confussed by how to use async functions. My goal was to create a publishing page for wich I need to use a predefined content type and page layout. Then i need to get the listitem for that page and populate some of the fields. Finally update the listitem get the coresponding file check it in and publish it. Here is the Code I am using.
function initiatePageCreation(){
var scriptbase = _spPageContextInfo.webServerRelativeUrl + "/_layouts/15/";
$.getScript(scriptbase + "SP.Runtime.js", function(){
$.getScript(scriptbase + "SP.js", function(){
$.getScript(scriptbase + "SP.Publishing.js", createPublishingPage);
});
});
}
var ctx, web, pageLayoutItem, newPage, pageItem, pageName, file;
function createPublishingPage(){
ctx = new SP.ClientContext.get_current();
web = ctx.get_web();
var masterPageGallery = web.get_lists().getByTitle("Master Page Gallery");
pageLayoutItem = masterPageGallery.getItemById(355);
ctx.load(web);
ctx.load(pageLayoutItem);
ctx.executeQueryAsync(on_LoadLayout_success, on_LoadLayout_failure);
}
function on_LoadLayout_success(){
var publishingWeb = new SP.Publishing.PublishingWeb.getPublishingWeb(ctx, web);
var pageInfo = new SP.Publishing.PublishingPageInformation();
pageName = "New Publishing Page.aspx";
pageInfo.set_name(pageName);
pageInfo.set_pageLayoutListItem(pageLayoutItem);
newPage = publishingWeb.addPublishingPage(pageInfo);
ctx.load(newPage);
ctx.executeQueryAsync(on_PageAdded_success, on_PageAdded_failure);
}
function on_PageAdded_success(){
pageItem = newPage.get_listItem();
ctx.load(pageItem);
ctx.executeQueryAsync(on_ItemLoaded_success, on_ItemLoaded_failure);
}
function on_ItemLoaded_success(){
pageItem.set_item('Title', 'Test123');
//set some more Fieldvalues
pageItem.update();
ctx.load(pageItem);
ctx.executeQueryAsync(on_AttributesAdded_success, on_AttributesAdded_failure);
}
function on_AttributesAdded_success(){
file = pageItem.get_file();
file.checkIn();
file.publish();
ctx.load(file);
ctx.executeQueryAsync(on_FileCheckedIn_success, on_FileCheckedIn_failure);
}
function on_FileCheckedIn_success(){
console.log("done");
}
function on_FileCheckedIn_failure(sender,args){
console.log('Request failed' + args.get_message());
}
function on_AttributesAdded_failure(sender, args){
console.log('Request failed' + args.get_message());
}
function on_ItemLoaded_failure(sender, args){
console.log('Request failed' + args.get_message());
}
function on_LoadLayout_failure(sender, args){
console.log('Request failed' + args.get_message());
}
function on_PageAdded_failure(sender, args){
console.log('Request failed' + args.get_message());
}
I hope someone may find this usefull.