将 Progress JSDO 与 Angular CLI 项目一起使用
Using Progress JSDO with Angular CLI project
我正在尝试创建一个 Angular 应用程序作为 API 的客户端,该应用程序需要使用 Progress JSDO 通过业务实体与 OpenEdge 数据进行交互。我是 Angular 开发的新手,但我对 Progress JSDO 相当熟悉,所以我觉得我的问题根源在于我如何在项目中包含进度。
我找到了这个例子,我认为它已经过时了:
与此 PUG 挑战 PDF 相同:
这是我使用的与 JSDO 交互的代码:
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/fromPromise';
import 'rxjs/add/operator/map';
import { progress } from 'jsdo';
import { PriceResponse } from './oo-price-response';
import { OOProduct } from './oo-product';
//Products JSDO service
@Injectable()
export class OEWebPriceService {
private tableName: string = 'Products';
private jsdo: any;
constructor() {
const serviceURI = 'myServiceURI';
const catalogURI = 'myCatalogURI';
let session = new progress.data.JSDOSession({ serviceURI: serviceURI });
session.login('devono|ulfoods.com','devono')
.then(() => {
session.addCatalog(catalogURI);
});
let productJSDO = new progress.data.JSDO({ name: 'Products' });
this.jsdo = productJSDO;
}
public getPrices(): Observable<OOProduct[]> {
return this.fetch();
}
private fetch(): Observable<OOProduct[]> {
let ttPrices=[];
let params = {
accountNumber: "945873",
ttPrice: {
ttPrice: [
{ seq: 0, productCode: "152709"},
{ seq: 1, productCode: "717141"},
{ seq: 2, productCode: "152711"}
]
},
userLoginID: "devono|ulfoods.com"
};
let prodPromise = new Promise((resolve, reject) => {
this.jsdo.invoke("GetPrices", params)
.done( (jsdo: any, success: any, request: any) => {
ttPrices = request.response.ttPrice.ttPrice;
resolve(ttPrices);
})
});
let result = Observable.fromPromise(prodPromise);
return result;
}
}
此代码在 Sublime 中查找文件,TypeScript 识别所有类型和方法等,并且一切都可以正常编译。但是,在浏览器中,我从 Chrome 开发人员工具中收到一条错误消息:
我觉得 Progress 找不到 jQuery,即使当我通过 npm 将 JSDO 安装到我的项目时 jQuery 也随之而来。我缺少一个步骤吗?有没有人成功地将 JSDO 包含在可以列出步骤的 Angular 项目中?
我将尝试在 Plunker 或其他软件中创建一个工作示例,但我真的不知道该怎么做,所以希望这对现在来说足够了。
提前致谢!
这是一个工作示例
https://github.com/consultingwerk/Angular2JsdoSamples/tree/master/Demo1-EGarcia-Simple
确保 Jquery 在您的 angular-cli.json
中被引用为脚本
我正在尝试创建一个 Angular 应用程序作为 API 的客户端,该应用程序需要使用 Progress JSDO 通过业务实体与 OpenEdge 数据进行交互。我是 Angular 开发的新手,但我对 Progress JSDO 相当熟悉,所以我觉得我的问题根源在于我如何在项目中包含进度。
我找到了这个例子,我认为它已经过时了:
与此 PUG 挑战 PDF 相同:
这是我使用的与 JSDO 交互的代码:
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/fromPromise';
import 'rxjs/add/operator/map';
import { progress } from 'jsdo';
import { PriceResponse } from './oo-price-response';
import { OOProduct } from './oo-product';
//Products JSDO service
@Injectable()
export class OEWebPriceService {
private tableName: string = 'Products';
private jsdo: any;
constructor() {
const serviceURI = 'myServiceURI';
const catalogURI = 'myCatalogURI';
let session = new progress.data.JSDOSession({ serviceURI: serviceURI });
session.login('devono|ulfoods.com','devono')
.then(() => {
session.addCatalog(catalogURI);
});
let productJSDO = new progress.data.JSDO({ name: 'Products' });
this.jsdo = productJSDO;
}
public getPrices(): Observable<OOProduct[]> {
return this.fetch();
}
private fetch(): Observable<OOProduct[]> {
let ttPrices=[];
let params = {
accountNumber: "945873",
ttPrice: {
ttPrice: [
{ seq: 0, productCode: "152709"},
{ seq: 1, productCode: "717141"},
{ seq: 2, productCode: "152711"}
]
},
userLoginID: "devono|ulfoods.com"
};
let prodPromise = new Promise((resolve, reject) => {
this.jsdo.invoke("GetPrices", params)
.done( (jsdo: any, success: any, request: any) => {
ttPrices = request.response.ttPrice.ttPrice;
resolve(ttPrices);
})
});
let result = Observable.fromPromise(prodPromise);
return result;
}
}
此代码在 Sublime 中查找文件,TypeScript 识别所有类型和方法等,并且一切都可以正常编译。但是,在浏览器中,我从 Chrome 开发人员工具中收到一条错误消息:
我觉得 Progress 找不到 jQuery,即使当我通过 npm 将 JSDO 安装到我的项目时 jQuery 也随之而来。我缺少一个步骤吗?有没有人成功地将 JSDO 包含在可以列出步骤的 Angular 项目中?
我将尝试在 Plunker 或其他软件中创建一个工作示例,但我真的不知道该怎么做,所以希望这对现在来说足够了。
提前致谢!
这是一个工作示例
https://github.com/consultingwerk/Angular2JsdoSamples/tree/master/Demo1-EGarcia-Simple
确保 Jquery 在您的 angular-cli.json
中被引用为脚本