opcenter8 使用webapi+Angular.js+bootstrap 开发
opcenter8的开发方式跟之前的camstar7版本差不多,自带的UI开发上手难度大,调试困难,开发周期变得很长,所以此文章再不添加任何第三方插件的情况下使用系统自带的Angular.js+bootstrap做开发
1.添加WEBAPI支持
添加WebApiConfig.cs
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API 配置和服务
// Web API 路由
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
在Global.asax的Application_Start方法添加代码
System.Web.Http.GlobalConfiguration.Configure(WebApiConfig.Register);
在Global.asax的Application_BeginRequest方法添加代码,设置在webapi中使用session
HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);
在webconfig的runtime节点添加json依赖
添加控制器ValuesController.cs
public class ValuesController : ApiController
{
public IEnumerable Get()
{
return new string[] { "value1", "value2" };
}
}
在浏览器界面上调用 https://localhost/CamstarPortal/api/values
2.添加前端界面和菜单
自定义界面
添加页面在主目录下添加文件夹html,再添加自定义页面demo.aspx
添加菜单
这个时候点击菜单页面并不会显示出来,修改PortalService.cs的GetChildMenuItems方法,添加三行代码(黄色底色部分)
private ApolloMenuItem[] GetChildMenuItems(string parentName, Row[] menuItems)
{
var resultMenuItems = new List();
if (string.IsNullOrEmpty(parentName))
return resultMenuItems.ToArray();
var session = FrameworkManagerUtil.GetFrameworkSession();
var items = menuItems.Where(i => i.Values[11] == parentName).ToArray();
foreach (var item in items)
{
var pageFlowName = item.Values[7];
var virtualPageName = item.Values[9];
var url = item.Values[3];//添加的代码1
var navigateToUrl = (!string.IsNullOrEmpty(virtualPageName) ? virtualPageName : pageFlowName);
navigateToUrl = string.IsNullOrEmpty(navigateToUrl) ? url : navigateToUrl;//添加的代码2
pageFlowName = !string.IsNullOrEmpty(url) ? item.Values[1] : pageFlowName;//添加的代码3
var queryString = string.Empty;
if (item.Values[4] != null)
{
queryString += item.Values[4].ToString();
}
if (item.Values[5] != null)
{
queryString += queryString.EndsWith("&") ? "" : "&";
queryString += "ServiceName=" + item.Values[5];
}
var newItem = new ApolloMenuItem()
{
Id = item.Values[0],
DisplayName = item.Values[1],
DisplayValue = item.Values[2],
QueryString = queryString,
UIPageFlowName = item.Values[7],
UIVirtualPageName = navigateToUrl,
ParentName = item.Values[11],
Order = item.Values[16],
ApolloIcon = item.Values[17]
};
var children = this.GetChildMenuItems(newItem.DisplayValue, menuItems);
if (children != null)
newItem.Children = children;
if (string.IsNullOrEmpty(newItem.UIVirtualPageName) || session.GetAuthorizationManager().IsUIComponentAuthorized(newItem.UIVirtualPageName) || !string.IsNullOrEmpty(pageFlowName))
{
resultMenuItems.Add(newItem);
}
}
// Set home page
var homePage = session.SessionValues.UserPortalProfile.PortalV8HomePage;
var rootMenuName = session.SessionValues.UserPortalV8MenuName;
var homePageLbl = FrameworkManagerUtil.GetLabelValue(_homePageLbl) ?? "Home Page";
if (!string.IsNullOrEmpty(homePage))
{
var homeMenuItem = resultMenuItems.FirstOrDefault(hmi => hmi.UIVirtualPageName == homePage) ?? null;
if (homeMenuItem != null)
{
homeMenuItem.IsHomePage = true;
homeMenuItem.DisplayValue = homePageLbl;
}
else if (resultMenuItems != null && parentName == rootMenuName) // add home menu item if configured and parent is root and not included in menu items
{
resultMenuItems.Add(new ApolloMenuItem
{
UIVirtualPageName = homePage,
DisplayName = homePageLbl,
DisplayValue = homePageLbl,
Children = new ApolloMenuItem[0],
ParentName = rootMenuName,
IsHomePage = true
});
}
}
return resultMenuItems.ToArray();
}
修改demo.aspx内容
@
@example.com
这个时候再去点击菜单,页面就显示内容出来了,同样道理如果喜欢其他前端框架的可以自己加到项目里。