算法艺术创作
algorithmic-art
通过代码和可调参数创作生成艺术与交互式视觉效果。
sap-sac-custom-widget【设计与创意】SAP Analytics Cloud Custom Widgets — web component development, widget manifest, data binding, styling, deployment to SAC tenant, custom analytics extensions. Use when building custom SAC widgets, extending SAC analytic applications, or integrating external charts and visualizations into SAC.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Extend SAC with custom web components for advanced visualization.
my-widget/
├── widget.json — Manifest
├── main.js — Widget logic
├── styling.css — CSS
└── assets/ — Images, fonts
{
"name": "my-forecast-chart",
"description": "Custom forecast visualization",
"version": "1.0.0",
"vendor": "SAP",
"webComponent": {
"tag": "my-forecast-chart",
"url": "https://my-cdn.com/widgets/forecast/main.js",
"properties": {
"data": { "type": "ResultSet" },
"chartType": { "type": "string", "default": "line" }
},
"events": { "onDataPointClick": { "description": "Data point clicked" } }
}
}
class ForecastChart extends HTMLElement {
constructor() {
super();
this._data = null;
}
connectedCallback() {
this.innerHTML = '<canvas id="chart" width="400" height="200"></canvas>';
this._render();
}
set data(value) {
this._data = value;
this._render();
}
_render() {
if (!this._data) return;
var ctx = this.querySelector('#chart').getContext('2d');
new Chart(ctx, {
type: 'line',
data: {
labels: this._data.map(r => r.period),
datasets: [{ label: 'Actual', data: this._data.map(r => r.actual) },
{ label: 'Forecast', data: this._data.map(r => r.forecast) }]
}
});
}
}
customElements.define('my-forecast-chart', ForecastChart);
// In SAC Analytics Designer
var widget = CustomWidget_1;
widget.setDataBinding({
dataSource: "SalesData",
measures: ["Revenue"],
dimensions: [["Month"]]
});
// Widget receives ResultSet JSON:
// [{period: "2026.01", actual: 1000, forecast: 1100}, ...]