在Client Web Part中使用link

本文介绍了如何在SharePoint2013应用模型中使用客户端网页部件链接,包括链接到应用默认页面、相关列表及应用Web的链接,并提供了代码示例和解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址 http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/12/10/working-with-links-in-a-client-web-part.aspx 

本文由SPFarmer翻译

如果你读过我的文章,那么你在新的SharePoint 2013 app model中使用客户端网页部件就有了一个很好的开始。在app part里面,你做的所有事情,都在一个IFRAME里面。任何时候,当你在App Part里创建link的时候,你一定要记住这一点。这个有一点点复杂,但是也没有想象的那么复杂。从哪里开始呢?我们先看看链接到app的默认页面需要做什么吧。一般情况下,这个页面叫做default.aspx,他的url一般类似于:

http://app-4715ba34d5bfe2.apptest.local/sites/developer/HelloWorldApp/Pages/Default.aspx

Effectively 这个url有一个前缀(app),一个 Id, 一个存放这个appssubdomain,当前我在一个developer站点上运行这个app,接下来是app name,最终是Pages文件夹 (Visual Studio里的名字是匹配的)。存放客户端网页部件的aspx页面,一般情况下也在这个文件夹里。在我这个例子里是 HelloWorldClientWebPart.aspx。也就是说,如果我想在我的客户端网页部件里创建一个链接到我app默认页面的link,我应该可以这么做:

<a href="default.aspx">Go to app default page</a>

这个应该会链接app的默认页面,但是很不幸的是,下面是显示结果。


链接是没有问题的,但是页面被设计成在整个浏览器运行,因此它没有 AllowFraming 标签。要修复这个很简单,加一个target=”_top”,这样这里link就会在父frame里打开,而不是IFREAM。比如:

<a href="default.aspx" target="_top">Go to app page 2</a>

现在link就好用了。

另外一个你可能遇到的常见的情景是,链接到一个相关的列表。假设我有一个listTestList,它的相对路径是Lists/TestList We can get to this, but we need to usea relative path and go up one folder first since the page executes out of thePages library.  Here is what that link would look like.

<a href="../Lists/TestList" target="_top">Go to list</a>

最后,有时候你可能想在客户端网页部件里获取到app weblink。你可以使用同样的CSOM达到目的。从获取app web的引用开始。

var context;
var web;
context = new SP.ClientContext.get_current();
web =context.get_web();


然后你需要加载context,运行查询,从而获取到web对象。

context.load(web);
context.executeQueryAsync(onUrlRequestSucceeded,onQueryFailed);


success方法里, 你可以读到 URL.,这样我得到了页面上link的引用,然后我可以修改它,分配一个href属性。

function onUrlRequestSucceeded() {

    var appWebUrl = web.get_url();

   $("#MyLink").attr("href", appWebUrl);

}

当使用link的时候,你现在可以有多个选择了。这个并不是很复杂,但是值得写下来。

Published Dec 10 2012, 10:00 AM by CoreyRoth

Filed under: SharePointSharePoint 2013Apps

 

<think>我们讨论的是电气设计研发中常用的专业网站,这些网站提供元器件数据、设计工具、行业标准、仿真模型等资源。下面我将分类介绍并提供代码示例展示如何从这些网站获取数据。 ### 一、电气设计研发常用网站分类 ```mermaid graph TD A[电气设计网站] --> B[元器件数据库] A --> C[电路仿真平台] A --> D[PCB设计资源] A --> E[行业标准文档] A --> F[设计社区论坛] ``` #### 1. 元器件数据库 - **Digi-Key**:https://www.digikey.com/ - **Mouser**:https://www.mouser.com/ - **Octopart**:https://octopart.com/ (元器件搜索引擎) #### 2. 电路仿真平台 - **LTspice**:https://www.analog.com/en/design-center/design-tools-and-calculators/ltspice-simulator.html - **CircuitLab**:https://www.circuitlab.com/ - **Falstad模拟器**:https://www.falstad.com/circuit/ #### 3. PCB设计资源 - **SnapEDA**:https://www.snapeda.com/ (元器件封装库) - **Ultra Librarian**:https://www.ultralibrarian.com/ - **PCBWay**:https://www.pcbway.com/ (PCB制造) #### 4. 行业标准文档 - **IEC**:https://www.iec.ch/ - **IEEE Standards**:https://standards.ieee.org/ - **IPC**:https://www.ipc.org/ (PCB标准) #### 5. 设计社区论坛 - **EEVblog**:https://www.eevblog.com/forum/ - **All About Circuits**:https://forum.allaboutcircuits.com/ - **StackExchange Electrical Engineering**:https://electronics.stackexchange.com/ ### 二、网站数据获取代码示例 以下代码演示如何从Digi-Key和Octopart获取元器件数据: #### 1. Digi-Key API 使用示例 ```python import requests import json # Digi-Key API v3 需要先获取OAuth2 token def get_digikey_token(client_id, client_secret): token_url = "https://api.digikey.com/v1/oauth2/token" payload = { "client_id": client_id, "client_secret": client_secret, "grant_type": "client_credentials" } response = requests.post(token_url, data=payload) return response.json()['access_token'] def search_digikey_part(token, keyword): url = "https://api.digikey.com/services/search/v3/products" headers = { "Authorization": f"Bearer {token}", "X-DIGIKEY-Client-Id": "your-client-id", # 替换为实际ID "Content-Type": "application/json" } params = { "keywords": keyword, "recordCount": 5 } response = requests.get(url, headers=headers, params=params) return response.json() # 使用示例 client_id = "your-client-id" client_secret = "your-client-secret" token = get_digikey_token(client_id, client_secret) result = search_digikey_part(token, "resistor 10k") print(json.dumps(result, indent=2)) ``` #### 2. Octopart API 示例 ```python import requests def search_octopart(part_number): url = "https://octopart.com/api/v4/parts/search" params = { "api_key": "YOUR_API_KEY", # 替换为实际API Key "q": part_number, "include[]": ["specs", "datasheets"] } response = requests.get(url, params=params) return response.json() # 使用示例 result = search_octopart("LM358") print(result['results'][0]['item']) # 打印第一个匹配结果 ``` ### 三、电路仿真资源集成 以下代码展示如何从LTspice官网下载模型并集成到本地设计: ```python import requests import os def download_ltspice_model(model_name, save_dir): base_url = "https://www.analog.com/media/en/simulation-models/ltspice/" url = f"{base_url}{model_name}.asc" response = requests.get(url) if response.status_code == 200: with open(os.path.join(save_dir, f"{model_name}.asc"), 'wb') as f: f.write(response.content) print(f"下载成功: {model_name}") else: print(f"下载失败: {model_name}") # 下载常用模型 models = ["LT1028", "LT1167", "LT1128"] for model in models: download_ltspice_model(model, "spice_models") ``` ### 四、行业标准文档自动检索 使用Python从IEC网站搜索标准: ```python import requests from bs4 import BeautifulSoup def search_iec_standard(keyword): url = "https://webstore.iec.ch/search" params = {"q": keyword} response = requests.get(url, params=params) soup = BeautifulSoup(response.text, 'html.parser') standards = [] for item in soup.select('.search-result-item'): title = item.select_one('.title').text.strip() ref = item.select_one('.ref').text.strip() link = "https://webstore.iec.ch" + item.select_one('a')['href'] standards.append({"title": title, "ref": ref, "link": link}) return standards # 搜索相关标准 results = search_iec_standard("safety electrical") for std in results[:3]: print(f"{std['ref']}: {std['title']}\n{std['link']}\n") ``` ### 五、设计社区内容监控 监控EEVblog论坛新帖: ```python import feedparser def monitor_eevblog_forum(): url = "https://www.eevblog.com/forum/feed/" feed = feedparser.parse(url) for entry in feed.entries[:5]: print(f"标题: {entry.title}") print(f"链接: {entry.link}") print(f"发布时间: {entry.published}") print("-" * 50) monitor_eevblog_forum() ``` ### 六、电气设计资源整合平台 构建一个整合上述资源的Flask应用: ```python from flask import Flask, render_template, request, jsonify import json app = Flask(__name__) # 模拟数据库存储的常用元器件 component_db = [ {"name": "LM358", "type": "运算放大器", "manufacturer": "Texas Instruments"}, {"name": "2N2222", "type": "晶体管", "manufacturer": "ON Semiconductor"}, {"name": "10kΩ电阻", "type": "电阻", "manufacturer": "Yageo"} ] @app.route('/') def index(): return render_template('index.html') @app.route('/search') def search_component(): query = request.args.get('q', '') results = [comp for comp in component_db if query.lower() in comp['name'].lower()] return jsonify(results) @app.route('/standards') def standards(): # 这里可以集成IEC搜索函数 return render_template('standards.html') if __name__ == '__main__': app.run(debug=True) ``` ### 七、专业建议 1. **API使用注意事项**: - 遵守网站API使用条款 - 设置合理的请求频率 - 缓存常用数据减少请求 2. **设计资源管理**: ```mermaid graph LR A[本地资源库] --> B[元器件库] A --> C[封装库] A --> D[仿真模型] A --> E[设计模板] ``` 3. **自动化工作流**: - 元器件选型 → 电路仿真 → PCB设计 → BOM生成 - 使用KiCad/Eagle脚本实现自动化 §§相关问题§§: 1. 如何从Mouser Electronics网站获取实时价格数据? 2. 有哪些开源工具可以管理电子元器件库存? 3. 如何将LTspice仿真集成到Python自动化测试中? 4. 在PCB设计中如何自动检查电气规则?</think>### 电气设计研发专业网站资源与集成方案 电气设计研发涉及多个关键领域,包括原理图设计、PCB布局、仿真分析、元件选型和文档管理。以下是专业工程师常用的网站资源及其集成应用方案: #### 一、核心设计资源平台 ```mermaid graph TD A[电气设计研发] --> B[元件库] A --> C[仿真工具] A --> D[设计社区] A --> E[标准文档] A --> F[制造服务] ``` ##### 1. 元件库与数据手册 - **Octopart** (https://octopart.com) - 全球最大的电子元件搜索引擎 - **SnapEDA** (https://www.snapeda.com) - 数百万个即用型原理图符号和PCB封装 - **Ultra Librarian** (https://www.ultralibrarian.com) - 自动化元件库生成工具 ```python import requests def get_component_data(part_number): """从Octopart API获取元件数据""" API_KEY = "YOUR_API_KEY" url = f"https://octopart.com/api/v4/parts/search" params = { "api_key": API_KEY, "q": part_number, "include[]": ["specs", "datasheets"] } response = requests.get(url, params=params) if response.status_code == 200: data = response.json() return { "manufacturer": data["results"][0]["item"]["manufacturer"]["name"], "description": data["results"][0]["item"]["description"], "datasheet": data["results"][0]["item"]["datasheets"][0]["url"], "specs": data["results"][0]["item"]["specs"] } else: raise Exception(f"API请求失败: {response.status_code}") # 使用示例 try: component = get_component_data("LM358") print(f"元件: {component['description']}") print(f"数据手册: {component['datasheet']}") except Exception as e: print(f"错误: {str(e)}") ``` ##### 2. PCB设计与制造 - **PCBWay** (https://www.pcbway.com) - 快速PCB制造服务 - **JLCPCB** (https://jlcpcb.com) - 经济型PCB+SMT服务 - **KiCad Libraries** (https://kicad.github.io) - 开源EDA工具库 #### 二、仿真与计算工具 ##### 1. 在线电路仿真 - **CircuitLab** (https://www.circuitlab.com) - 浏览器版电路仿真 - **Falstad模拟器** (https://www.falstad.com/circuit) - 交互式电路仿真 ```javascript // 使用CircuitLab API创建电路原理图 const circuitlab = require('circuitlab-api'); const schematic = { components: [ { type: 'R', id: 'R1', value: '1k', position: [100, 50] }, { type: 'C', id: 'C1', value: '1u', position: [200, 50] }, { type: 'V', id: 'V1', value: '5', position: [50, 50] } ], connections: [ ['V1.1', 'R1.1'], ['R1.2', 'C1.1'], ['C1.2', 'V1.2'] ] }; circuitlab.createSchematic(schematic) .then(url => console.log(`原理图URL: ${url}`)) .catch(err => console.error(err)); ``` ##### 2. 专业计算工具 - **TI WEBENCH** (https://webench.ti.com) - 电源设计工具 - **Analog Devices EE-Sim** (https://www.analog.com/en/design-center/ee-sim.html) - 模拟电路设计 #### 三、标准与文档资源 ##### 1. 行业标准 - **IEC** (https://www.iec.ch) - 国际电工委员会标准 - **IEEE Xplore** (https://ieeexplore.ieee.org) - 电气电子工程师学会文献 - **IPC Standards** (https://www.ipc.org) - PCB设计制造标准 ##### 2. 文档自动化 ```python from PyPDF2 import PdfMerger import requests def create_design_report(components, output_file="design_report.pdf"): """生成包含元件数据手册的设计报告""" merger = PdfMerger() for comp in components: try: # 获取数据手册PDF data = get_component_data(comp) pdf_response = requests.get(data['datasheet']) # 保存并合并PDF with open(f"{comp}_ds.pdf", 'wb') as f: f.write(pdf_response.content) merger.append(f"{comp}_ds.pdf") except Exception as e: print(f"无法获取{comp}的数据手册: {str(e)}") merger.write(output_file) merger.close() return output_file # 使用示例 create_design_report(["LM358", "2N2222", "TL084"]) ``` #### 四、设计协作与版本控制 ##### 1. 专业协作平台 - **Altium 365** (https://www.altium.com/altium-365) - PCB设计协作云平台 - **OrCAD Capture CIS** - 元件信息管理系统集成 ##### 2. Git版本控制集成 ```bash # Git仓库结构示例 electrical-project/ ├── schematics/ │ ├── main.sch │ └── power_supply.sch ├── pcb/ │ └── main.kicad_pcb ├── bom/ │ └── components.csv ├── simulations/ │ └── filter_circuit.py └── docs/ └── design_requirements.md ``` #### 五、制造与生产服务 ##### 1. PCB制造服务API集成 ```python import requests def order_pcb(design_file, layers=2, quantity=5): """通过JLCPCB API下单PCB""" API_KEY = "YOUR_JLC_API_KEY" url = "https://jlcpcb.com/api/order" files = {'file': open(design_file, 'rb')} data = { 'layers': layers, 'quantity': quantity, 'material': 'FR4', 'thickness': 1.6 } headers = {'Authorization': f'Bearer {API_KEY}'} response = requests.post(url, headers=headers, data=data, files=files) return response.json() # 使用示例 order_response = order_pcb("designs/pcb_v1.zip") print(f"订单ID: {order_response['order_id']}") print(f"预计交付: {order_response['delivery_date']}") ``` #### 六、专业社区与学习资源 1. **EEVblog论坛** (https://www.eevblog.com/forum) - 专业电子工程师社区 2. **All About Circuits** (https://forum.allaboutcircuits.com) - 电路设计论坛 3. **StackExchange Electrical** (https://electronics.stackexchange.com) - 技术问答平台 #### 七、企业级设计系统集成方案 ```python class ElectricalDesignSystem: def __init__(self): self.components = [] self.schematics = [] self.pcb_designs = [] def add_component(self, part_number): """添加元件到设计系统""" comp_data = get_component_data(part_number) self.components.append(comp_data) print(f"添加元件: {comp_data['description']}") def generate_bom(self): """生成物料清单CSV""" with open('bom.csv', 'w') as f: f.write("Part Number,Description,Manufacturer,Quantity\n") for comp in self.components: f.write(f"{comp['part_number']},{comp['description']},{comp['manufacturer']},1\n") def export_manufacturing_package(self): """导出制造包""" self.generate_bom() # 导出PCB设计文件 # 导出装配图 # 打包所有文件 return "manufacturing_package.zip" # 使用示例 design_system = ElectricalDesignSystem() design_system.add_component("LM358") design_system.add_component("1N4148") design_system.generate_bom() ``` ### 电气设计工作流优化建议 1. **自动化元件库管理** ```mermaid sequenceDiagram 工程师->>+SnapEDA: 搜索元件 SnapEDA-->>-工程师: 返回符号/封装 工程师->>+Git仓库: 提交新元件 Git仓库-->>-团队: 同步更新 ``` 2. **设计验证流程** - 电路仿真 → PCB布局 → 设计规则检查 → DFM分析 → 原型制造 3. **持续集成实践** ```yaml # .gitlab-ci.yml 示例 stages: - verify - manufacture schematic_check: stage: verify script: - kicad-cli sch verify design.sch pcb_drc: stage: verify script: - kicad-cli pcb drc design.kicad_pcb generate_gerbers: stage: manufacture script: - kicad-cli pcb export gerbers design.kicad_pcb artifacts: paths: - gerbers/ ``` ### 专业资源访问优化技巧 1. **浏览器扩展增强** ```javascript // 元件数据手册快速访问扩展 chrome.contextMenus.create({ title: "搜索Octopart: '%s'", contexts: ["selection"], onclick: (info) => { chrome.tabs.create({ url: `https://octopart.com/search?q=${info.selectionText}` }); } }); ``` 2. **企业资源门户集成** ```python # Flask应用示例 from flask import Flask, render_template import sqlite3 app = Flask(__name__) @app.route('/component/<part_number>') def component(part_number): conn = sqlite3.connect('company_components.db') cursor = conn.cursor() cursor.execute('SELECT * FROM components WHERE part_number=?', (part_number,)) comp = cursor.fetchone() return render_template('component.html', component=comp) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值