Microsoft云工程师 - SharePoint,Office 365,Azure,Dotnet,Agenular,JavaScript。
Microsoft云工程师 - SharePoint,Office 365,Azure,Dotnet,Agenular,JavaScript。

应用模型

Saam.–站点资产应用模型

开发人员在SharePoint 2013中有更多的选项,而不是之前的任何版本。  App Model是中心阶段。 可以理解的是,这在社区中创造了一些混乱和辩论。  除了我称之为“网站资产应用程序模型”的纯粹应用程序模型,我还想考虑另一种编码模式。

在SP2013发布之前,我会在MOSS2007和SP2010中添加jQuery“小部件”页面,其中包含内容编辑器。 上传HTML,CSS和JS文件。 简单有效。  不需要特殊的基础架构更改。 此方法仍然有效,并且实际上具有以下进步,如:

  • javascript.框架
  • 棱角,  Knockout
  • HTML 5浏览器
  • 休息 / _API /端点
  • ASP.NET WEPAPI.
  • 实体框架
  • 微风js.

我可能并不总是用纯粹的“App Model”, but I’在JavaScript前端开发和销售中的100%“从砖块到房屋” philosophy (http://channel9.msdn.com/Events/SharePoint-Conference/2014/SPC404)   将此称为您喜欢的名称,但JavaScript编码对于开发人员和管理员都具有优势。   我建议首先编码js,然后回退到在webapi over http中包装的c#,最后是农场解决方案wsp作为最后的手段。  

如果您发现此帮助,请留下评论!  

shades_smile.

图表

 图像
 图像

如何使用

配置

  • 在现场资产中创建新文件夹
  • 地图驱动器号
  • 使用本地IDE创建HTML / JS / CSS文件(Visual Studio,括号,记事本++等)
  • 将页面添加到SharePoint站点
  • 将内容编辑器添加到页面。将源属性设置为HTML位置。

调试

  • 编辑源HTML / JS / JSS
  • 用浏览器重新加载
  • 按F12调试,设置断点,检查DOM
  • 笔记–添加JS语句“debugger;”可以帮助提高本地浏览器事件。这可能是更容易创建编辑器中的断点,而不是使用F12再次滚动相同的代码库。http://www.w3schools.com/js/js_debugging.asp

允许有缺点:

  • 没有Visual Studio F5调试
  • 没有完整的包裹(.app)
  • 没有Office365商店
  • 没有应用仅限的主体(限于当前用户权限)
  • 很难部署多个实例

但是,可能有时萨姆优先:

  • 在SP2007 / 2010上工作
  • 缺少SP2013应用模型基础架构(通配符DNS,服务应用程序等)
  • Visual Studio不可用(适用于.app包/部署所需)
  • 非SharePoint开发人员直接舒适地编辑HTML / JS / CSS

比较表

特征SP2013
“App Model”
现场资产
应用模型
(萨姆)
HTTP调用HOST WEB,没有SP请求执行程序代理 是的
支持休息到SharePoint Designer中的外部内容类型 是的
列表和库用户数据卸载应用程序(代码升级) 是的
使用App用户数据为列表和库创建标准视图 是的
适用于SP2007和2010年旧版本 是的
受限于“App Web”许多功能禁用 是的
需要服务器基础架构更改 是的
*声称身份验证 是的
*网络上的通配符DNS 是的
*服务应用程序 是的
*其他SQL数据库和服务帐户 是的
需要安全清单 是的
*权限计划使用 是的
* Web服务端点URL 是的
能够在办公室365商店发布和销售 是的
能够使用应用身份安全主体 是的

SP2013“App Model”

网站资产应用程序模型(Saam)

直夹克 - 服装

参考

http://channel9.msdn.com/Events/Speakers/Scot-Hillier

  • ​”从砖块到房屋” >更广泛的观点“App Model”看所有前端编码(JS / REST)

http://www.itunity.com/community/questions/view/question/id/1

  • 使用SharePoint在其中有意义(组件就绪),但现在能够包含一个更广泛的第三方技术选择。  
  • 非微软,谷歌,其他,以及超越SP核心的全部创​​新网络。

http://blogs.msdn.com/b/amigan/archive/2012/12/10/part-2-introduction-to-sharepoint-2013-app-model.aspx

  • 详细的比较表
  • 是的,有些事情无法完成“App Model”
  • 是的,农场解决方案仍然有效 (但作为最后的手段 - 首先尝试前端编码)

http://sharepointpromag.com/blog/sharepoint-2013-s-cloud-app-model-it-s-what-you-wanted-all-along

  • 最终,它会发生成因。在诸如Office 365等多租户环境中,这是唯一的真实选项。
  • 办公室365.是低管理工作的黄金标准。

微风js.–编辑SQL表<100行的JS代码[视频]

使用SharePoint 2013和行业运动向云推向云,我一直在探索JavaScript作为开发丰富的应用程序的主要方式。

一个常见的挑战是数据访问。  

使用C#我有多年的[System.Data]的经验,可以在睡眠中对SQL关系数据库进行CRUD。 打开连接,查询,数据适配器,填充DataTable和Voila!   肌肉记忆。老习惯。 尝试和真实的方法。  但是,在新的客户端JS世界中,我没有任何线索开始。

进入 微风.

 

人们形容微风是“在JavaScript中的客户端上的实体框架“这听起来很简单,但为开发人员而言含义深刻。  CRUD操作,LINQ样式查询,导航主/外键,输入验证,缓存,批量更新等。  考虑和新想法需要时间吸收这很多。  微风可能替换:

  • ASP.NET(ASPX)Web表单
  • ASCX用户控件
  • Infopath表单
  • SharePoint. Web部件
  • WCF 5.6数据服务
  • odata.
  • 经典webapi.

 

我首先用几个目标代码一个例子:

  • 创造简单的SQL架构(两个表 - 父母/孩子 - 一对多)
  • 执行CRUD操作在js反对sql  tables
  • 利用JS插件和nuget“安装包”加载第三方组件
    • 安装 - 软件包Breeze.Webapi2.EF6
    • 安装包发风.Angular
    • 安装包angularjs.core
  • 很少的代码尽可能多

整个事情花了不到30分钟,我将视频编辑到15分。   我对这个过程的直接和容易留下了深刻的印象。  Breeze#在ASP.NET MVC中,后端WebAPI控制器几乎与Breeze示例代码相同。  每个实体(SQL表)添加一个C#方法,然后让Breeze剩下。 JS前端需要更多的时间来理解,但也很容易申请。   Connect Entity Manager到Breeze URL,您已为Crud查询做好准备。    Amazing!    鉴于微风有多简单,我会很难使用ODATA或手动创建WebAPI控制器C#代码来查询数据库。  如果可以使用微风,然后使用它!   你会省力很大。

如果您发现此帮助,请留下评论。   Thank you! 

shades_smile.

 

看视频

[Breezejs和Webapi–编辑具有少于100行代码的JS中的SQL表]

 

下载代码

下载

http://yinzigold.com/etc/Appraisal-Breeze-VS2013.zip

 

截图

 图像
 图像

 

 图像

 

参考

 

SharePoint. 2013..–App Model 3层图

我需要快速参考,并使用SharePoint 2013 App模型引入开发人员。 

对于传统的ASP.NET和DOT净编码器,在考虑主要在前端JavaScript,HTML和CSS中编写的新应用程序时,跨越哲学差距。  而不是编码“在”SharePoint(增强核心产品),我们现在代码“在”SharePoint旁边(附加添加休息/ JSON端点)。  

来自这种方法的稳定性是显着的。 我们将运行以外的SharePoint类似于Microsoft操作Office 365的方式。  在修补过程中,没有更多的SharePoint自定义。  没有更多的深夜WSP和Iisreset中断。  代码可以更加流畅,即在故障排除时甚至可以在单个用户的桌面上设置断点。  令人兴奋和强大的工具 - 这需要一种新的思维方式。

请免费下载我在下面制作的海报。  希望你发现它有用! 

shades_smile.

 

12-27-2014 3-07-04 PM

Webapi. ODATA.–10分钟视频介绍(Visual Studio 2013)

我一直在学习ODATA,并希望录制快速入门的视频,了解如何创建新的WebAPI项目,添加ODATA控制器,并发送HTTP CRUD操作。 以下是使用冒险工程部门的示例,其中包含示例代码,屏幕截图和10分钟的视频介绍。  如果您发现此帮助,请留下评论。  Thanks! 

shades_smile.

视频内容

  • 创建MVC 4 Web应用程序
  • SQL. Express - 冒险工程部门
  • 添加 ” AdventureWorks.edmx.
    • 巫师驱动
    • F4设置命名空间
  • 添加 ” DepartmentsController.cs.
    • 从EDMX类创建
    • 实现Odatacontroller.
    • 用键替换ID
  • 编辑 ”webapiconfig.cs.
    • 注释出默认路线
    • 添加Odata Route Builder
  • 手动测试HTTP
  • 用铬休息邮递员测试
  • SQL. Express - 请参阅更改的数据

看视频

Webapi. ODATA.–10分钟视频介绍(Visual Studio 2013)杰夫琼斯 Vimeo. .

示例代码

[webapiconfig.cs]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using System.Web.Http.OData.Builder;

namespace MvcApplication1
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            //config.Routes.MapHttpRoute(
            //    name: "DefaultApi",
            //    routeTemplate: "api/{controller}/{id}",
            //    defaults: new { id = RouteParameter.Optional }
            //);

            ODataConventionModelBuilder build = new ODataConventionModelBuilder();
            build.EntitySet("Departments");
            config.Routes.MapODataRoute("odata", "odata", build.GetEdmModel());
            config.EnableQuerySupport(new QueryableAttribute()); 

            // Uncomment the following line of code to enable query support for actions with an IQueryable or IQueryable return type.
            // To avoid processing unexpected or malicious queries, use the validation settings on QueryableAttribute to validate incoming queries.
            // For more information, visit http://go.microsoft.com/fwlink/?LinkId=279712.
            //config.EnableQuerySupport();

            // To disable tracing in your application, please comment out or remove the following line of code
            // For more information, refer to: http://www.asp.net/web-api
            config.EnableSystemDiagnosticsTracing();
        }
    }
}

 

[DepartmentsController.cs.]

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Http;
using System.Web.Http.OData;

namespace MvcApplication1.Controllers
{
    public class DepartmentsController : ODataController
    {
        private AdventureWorks2012Entities db = new AdventureWorks2012Entities();

        // GET api/Default1
        public IEnumerable GetDepartments()
        {
            return db.Departments.AsEnumerable();
        }

        // GET api/Default1/5
        public Department GetDepartment(short key)
        {
            Department department = db.Departments.Find(key);
            if (department == null)
            {
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
            }

            return department;
        }

        // PUT api/Default1/5
        public HttpResponseMessage PutDepartment(short key, Department department)
        {
            if (!ModelState.IsValid)
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
            }

            if (key != department.DepartmentID)
            {
                return Request.CreateResponse(HttpStatusCode.BadRequest);
            }

            db.Entry(department).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException ex)
            {
                return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
            }

            return Request.CreateResponse(HttpStatusCode.OK);
        }

        // POST api/Default1
        public HttpResponseMessage PostDepartment(Department department)
        {
            if (ModelState.IsValid)
            {
                db.Departments.Add(department);
                db.SaveChanges();

                HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, department);
                response.Headers.Location = new Uri(Url.Link("odata", new { key = department.DepartmentID }));
                return response;
            }
            else
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
            }
        }

        // DELETE api/Default1/5
        public HttpResponseMessage DeleteDepartment(short key)
        {
            Department department = db.Departments.Find(key);
            if (department == null)
            {
                return Request.CreateResponse(HttpStatusCode.NotFound);
            }

            db.Departments.Remove(department);

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException ex)
            {
                return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
            }

            return Request.CreateResponse(HttpStatusCode.OK, department);
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }
    }
}

下载

截图

 图像
 图像
 图像
 图像
 图像
返回顶部▲返回顶部▲